Learning Path in Software
Christmas Eve, but no festive atmosphere. Spent the afternoon at the Software Institute looking at new dev boards. The teachers went to a restaurant dinner while I stayed 30km from Shanghai on duty. The campus was empty and cold.
A motivated junior emailed me. Nothing else to do, so I wrote a long reply. Then pasted it here as a blog post.
Q:
I’ve been thinking I should learn MFC, ATL, STL, C#, then Java, VB, ASP during undergrad. But today I realized this is far from enough.
I want my learning体系 (system) to be big and deep enough, at least for undergrad. Otherwise even if I get into grad school, I’ll have no momentum. I need a framework — complete, big, deep.
Don’t laugh, but the teachers here are limited (I checked 8). Nobody can give me a完整 (complete) knowledge framework. One teacher told me: “VB is good enough, just learn VB well!” Another asked: “What’s MFC for?”
Brother He, you have to help me, or I won’t even have a coffin!
A:
Glad to see you so motivated — rare at our Software Institute.
Most items you listed are programming languages and tools. Important, yes, but not enough. Computer science is vast.
Learning languages: first, understand the ideas behind each language (C++/Java/C# → OO, STL → generic programming). Second, see each language’s strengths and weaknesses (C++ for DB apps is painful, VB for drivers impossible). Third, learn in context.
Beyond languages, I suggest:
-
Computer fundamentals: OS principles, databases, assembly, networking, compilers, computer architecture. Know how your program runs on the hardware.
-
Math and theory: Data structures and algorithms, discrete math, graphics, cryptography. Especially data structures — without them, quality software is impossible.
-
System analysis and design: Software engineering, design patterns for OO architecture.
Also, join the programmer community — CSDN, Donews, etc. Don’t work in isolation.
Best regards, Zongjian He School of Software Engineering, Tongji University