The first computer I ever had was some 90’s beige, enormous hand-me-down from my dad. He gave it to me when I was about eight or nine and told me “no online stores, no chat rooms, have fun!” It ran Windows XP and had Internet access, though at this point I had no clue what an operating system or network was. Still, my brothers installed Kazaa for me and I learned how to download music (not understanding the DRM issues)!
One day, my dad decided to show me a “cool” program on XP. He opened cmd and said, “Here. This is DOS. This is what your computer runs on.”
Here at San Jose State, all computer science classes are taught using Java (with the exception of inherently low level classes like computer architecture). I get it… when a brand new student that has never written a line of code before enters your classroom, it’s tempting to teach them one language so they gain some degree of comfort. This is fine for an introductory class, but other languages should be introduced and encouraged later in one’s academic career.
I learned to program in C. I’m not one to say a given language is better than another, but I will say that C forces you to understand concepts such as memory addressing and allocation. Additionally, I used a Linux distro and the terminal for compilation and running. This let me understand the exact process of developing a C program since it didn’t abstract anything away. A solid understanding of these concepts has helped me a lot throughout both my academic and professional careers.
At Portland Community College, I learned object-oriented concepts in C++. Then, once I moved to SJSU, classes were all taught in Java. Instead of seeing it as a hurdle I’d need to jump to be successful here, I saw it as an opportunity.
Once you understand core programming concepts, you should be able to translate them to any language. This is a critical skill that is not being encouraged at “uni-lingual” universities.
Of course each language has their own quirks: C has pointers, Java automatically deallocates your memory, PHP uses associative arrays, Haskell variables are immutable by default, etc, but this should not be that big of an issue! The central concepts are able to translate.