I want to learn to program in a \'future-proof\' manner, if you like. Whilst Win
ID: 639702 • Letter: I
Question
I want to learn to program in a 'future-proof' manner, if you like. Whilst Windows dominates the desktop OS marketplace (for now), obviously there is a lot of value in learning its languages/frameworks/API's and so on - this might be subject to change as new devices emerge or Windows shoots itself in the foot (over-friendly previews of Windows 8 don't look too appealing...).
Would I be right in thinking that having a solid knowledge of C/C++ for back-end logic/low level programming and the like, combined with an extremely portable language like Java for GUI's and so on, would be a good basis for software development that will prove useful on the most amount of systems? - I'm talking desktop PC's, tablets, phones.
Explanation / Answer
If you want to be future proof, the best advice I can give you is not enclosing yourself into a technology.
So don't learn APIs blindly. Learn how they are conceived. What are the philosophies behind the scene? What are their advantages and flaws? Think software in general, not a specific technology.
You can also work on good program conception, going to OOP and AOP is a good choice IMO. But don't just understand the mechanism, truly work on the philosophy behind the mechanism.
Don't neglect general computer science, like data structures and algorithms, because they are cross technology knowledge which is always useful.
Also go for good practices. You often have dozen ways to do something, but most of them are crap : bug prone, hard to maintain, hard to understand later or by another programmer, etc . . . Usually, the code is harder to read than to write. So learn how to spend a little more effort on writing to make the reading easier (because you'll read code more than you write).
Learn effective techniques to debug (smart use of log and debugger) and test (how to write code that can be unit tested easily and how to automate these tests).
Then, you'll need a general technology background. I'm talking about very broad knowledge, like how does a processor work (cache miss or branch prediction are good start), about UNIX systems, about network protocols like IP, TCP and Ethernet, etc . . .
In the end, learn how to learn. If you know how to learn, then you can adapt.
You'll need some strong knowledge in specific technologies to be able to find a job, but those are outdated really quickly (think about COBOL for example, or web programming at the time of the IE/Netscape war). So don't rely on them to be future-proof. They will be key to get hired, but definitively not what makes a great programmer and what will make your skills durable over time.
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.