Hey gang. I’ve been playing around here and there with things like HTML, CSS, Java, MySQL for years but have trouble getting past more basic implementations of Java and the C languages. Mostly because there has been no pathway set in front of me to help develop my skillset further.
I was wondering if anyone in the Stonehearth community well-versed in Java, C++, Python, Lua had recommendations as to good solid resources (preferably texts/books as opposed to web-tutorials, unless that’s the only way to go) that they might have used while learning that they could recommend to me.
Start with CS106a and knock yourself out–lectures, materials, everything is now online. The language (java) is not immediately relevant to Stonehearth, but a good grounding in fundamentals is always useful.
Hoping to re-learn and then grapple with some basics before I try to tackle anything complicated. Definitely appreciate the push in the right direction!
I learnt the very basics of Python through the help of Mr. Thenewboston.
I also learnt the basics of Java through Thenewboston and then basic-intermediate through the help of Mr. TheChernoProject.
Thenewboston is a great teacher but not the best at coding and making his programs efficiently and to be efficient.
Thechernoproject is very wild but if you want to learn Java properly, I suggest him.
I guess having a(n internet) friend who is a pro Java-er helps a lot though.
EDIT: Actually, thinking on the Lua front, there’s this kids’ game called ROBLOX where you can make games and script them to do stuff using Lua. From what I’ve heard, it’s a good first building block. There’s a whole wiki on it ;).
Tom, Tony and I have all taught multiple sections of the first course, CS106, at some point in our lives or another. We’re not up to date on the current assignments, but we know it’s super effective at cramming in the basics.
When CodeHS (started by a bunch of CS106 alums) turned Karel the Robot into Karel the Dog, I was, shall we say, scandalized. Later charmed. And I suppose balls make more sense than beepers.
I did think that sounded quite interesting myself, I’m likely to lazy to actually look at it though. Then again I’m quite nerdy and thought that the language processing and machine learning sounded both useful and interesting, again the laziness and distractedness issues. Luckily for us Stoners I have a minor obsession with modding tools and modding games in general so I won’t abandon things too quickly, I’m sure I’ll finish at least one project by release (Possibly even playable release if we get some coding focused livestreams).
Linear Dynamic Systems aside, I’m pretty sure that 75% of entry-level software engineering job interview questions are addressed in CS106a, CS106b and CS107. Sometimes it feels like the best (unintentionally) kept secret in Silicon Valley.
Not quite. Though CS106a is taught in Java, it’s really about laying a solid foundation for software design and implementation. The website specifically mentions: object-oriented design, decomposition, encapsulation, abstraction, and testing. In practical speak, this means: if you’ve taken this course, you can write code that other people can read and modify (which is super important for team projects). The language of the course actually changes as different languages come into vogue; when I took and taught it, it was in C.
CS106b moves to C++ (a natural step since Java abstracts away memory management) in order to introduce (in the website’s words): fundamental data structures (such as stacks, queues, sets) and data-directed design. Recursion and recursive data structures (linked lists, trees, graphs). Introduction to time and space complexity analysis. In Silicon Valley hiring-speak, this means that if you’ve taken this course AND CS106a, you can now write efficient code which re-uses popular, existing patterns. Again, the language is less important than the theory.
CS107 traditionally touches a wide variety of languages (when I took it, each week’s assignment was in a different language) as if to drive home the point that if you’ve learned how to think about programming, you can program in anything. This configuration of the class looks like it also covers advanced memory management, so that you know what your program is doing at a fundamental level when it’s executing (really useful for debugging not just your code, but the libraries on top of which it is written).
Mastering a coding language is undoubtedly useful. It’s like being an architect who really understands the material properties of wood. You can build any wooden structure! But mastering the fundamentals is like being an architect who really understands houses. You can build anything you want out of the best tool for the job. It’s the key difference (in my experience) between knowing how to code and being a software engineer, and valley companies anyway, seem to hire for the second, not the first.
thats very insightful, and painfully obvious in lots of industries… for me, in both Oil & Gas and Healthcare, i’ve had many a brilliant colleague, who would i would not classify as a software engineer… myself included…