3 ms·
Javascript is too weird to be a teaching language. Lexical scoping, invisible and sometimes unintuitive conversion rules, challenging runtime environments, and
by rsj_hn 6y ago
Javascript is too weird to be a teaching language. Lexical scoping, invisible and sometimes unintuitive conversion rules, challenging runtime environments, and asynchronous code are important concepts but I wouldn't put them into an intro to programming class.
IMO the ideal programming track would be as follows:
Intro to programming track:
* Assembly --> to understand the basics of how computers work and learn simple procedural and abstraction rules.
* C --> more procedural code, more abstractions, and higher order memory management
* Java --> to learn interfaces, object oriented code, and an introduction to functional programming concepts like lambdas, pure functions, the value of immutable objects
* {Racket/LISP or Favorite functional language} --> to gain intuition with more pure functional programming
Then, I'd have separate tools track:
* web dev
* database
* embedded dev
* AI,
etc.
Then a separate theory track:
* context free languages, regular expressions, compiler design
* algorithms and data structures
* some network theory and fault tolerance results
Then I'd have a professional track:
* tools: learn source control systems, IDEs, debuggers, profilers, bug management systems, different dev systems, using Jenkins or other CIT tools.
* skills: learn about secure coding (best practices for writing auditable code with known failure modes), efficient coding (calculating big O for a given code, fixing performance bottlenecks), maintainable coding (best practices for decoupling code, writing testable code, writing unit tests)
* theory: track where you learn advanced algorithm theory, design patterns, hopefully centered around case studies.
With elective tracks for things like OS theory, networking, etc.
Too many people leave college with lots of information about data structures and algorithms but don't know how to write a unit test, how to use an IDE, how to write unit tests, how to write secure, maintainable code.
- adrianN 6y agoI really don't think you should use C as a teaching language. There are way too many pitfalls, and using libraries is quite cumbersome.
- rsj_hn 6y agoI wouldn't program production code in C if I could avoid it. But sometimes you can't avoid it, and I wouldn't program production code in Pascal, either.
- adrianN 6y agoA programming language can both be the best fit for a concrete production problem and very unsuited as a teaching language.
- ajxs 6y agoAll of my academic computer science instruction was done in C. I was going to mention this in a response to one of the above comments regarding the pedagogical value of Python: I don't feel that taking onboard the concerns that come with programming in C (such as memory management) really made learning about computer science's fundamental algorithms and abstract data structures any easier. Many of the abstract data structures in question, such as trees and hash-maps, when practically implemented are dependent on an understanding of pointers that makes C an ideal pedagogical tool in at least one aspect. I don't think it's really practical for every scenario. I still think it's a great tool for teaching students about many aspects of how a modern computer, or operating-system functions. You definitely won't get far in gaining a holistic understanding of any modern operating-system without understanding C.
- deleted 6y ago[deleted]
- dunefox 6y ago> Java --> to learn interfaces, object oriented code, and an introduction to functional programming concepts like lambdas, pure functions, the value of immutable objects Jesus Christ, Java as an introduction to functional programming? I don't even know what to say.