Earlier quoted context omitted.
A beginner might have trouble assimilating this information - too few examples, not enough entry level drilling on data types, operators, flow control and functions. For example they might forget to put quotes around a string or not know how to use two for loops, one inside the other, even if they know how to use one in isolation. It's hard to grok how to compose things even if the student saw how to use them in isol…
>For example they might forget to put quotes around a string I wonder whether a "richer" editor/IDE, that flags such things immediately upon writing them, could greatly improve the learning experience. Many tools even point out things such as non-existing variables in scope, which are not strictly "errors" in a dynamic language during edit time.
Teach Yourself Computer Science
171–180 of 273 posts
Re: Teach Yourself Computer Science
#172One thing I'm always amazed by when casually talking to people about what I do is how they don't think they can do it. Many people think that software engineering and programming are some inscrutable thing. Sometimes I try to tell them that it is nothing special, it doesn't take a mega genius or math expert to do it. That the most important skill is just being able to solve real problems, soft skills and breaking pro…
A lot of jobs are very linear, like taking a task though some steps and wrangling people to help along the way. I think programming in a professional context is a very unique job in how much fresh thinking is required most of the time. Even at low levels you really work in a very independent way and have to make serious choices. Having a ticket rock up for a JBoss 4 app written in Seam and Rich Faces becomes a challe…
On the other hand, I think this attitude of programmers is too smug.
Many jobs that seem simple have to solve difficult problems and require engineer-like thinking. Sure some low-skill jobs, like cashier or mail delivery or truck driving don't require a lot of novel thinking on a daily basis. The bulk of the job is carrying out what you know.
But take for instance event organizers: no two events are the same. You need to negotiate the requirements from the client just like in software, you need to split up the work, plan it all out, execute together etc. Constraints often force you to be inventive.
Or how about lawyers? Even in mundane affairs, like divorce, no two cases are the same. There is probably more in common between one corporate mobile app or CRUD system and the other, than the circumstances of two divorce cases.
How about doctors? Sure some of it is routine, like much of a GP's work. But in complex surgeries they need to come up with a specific strategy and plan for the individual patient.
In fact, I think most jobs paid at the level of software engineers require a similar amount of novel thinking. The contrast is not software vs rest, but well-paid professional jobs vs low-paid, low-skill repetitive jobs (physical and mental as well, like office paper pushing).
Furthermore, many software jobs are really 9-5 "manufacturing". Not every dev is John Carmack. There's a huge demand on really simple business stuff and the very same functionality gets built over and over again by different companies for different business clients. These may be lower paid than the fun Google-level research-like creative software jobs, but they are out there. So top software jobs should be compared to the top of other professions, not just to any "white collar" job (because in the latter case you also have to include the "code monkeys" in the software jobs).
Re: Teach Yourself Computer Science
#173Has anyone here learned a subject by going through one of these "teach yourself" lists? I've learned most of what I know about computers on my own, but it wasn't from following a list of textbooks. And when I've tried to follow a course like this for other subjects, despite my initial interest, I've found myself unable to make it through more than a couple chapters of the first textbook before running out of steam. B…
I have used similar lists to go from almost entirely self taught to having finished a half dozen CS and FP courses at my own pace. At one point in my life I was keeping up a GitHub streak every day by just pushing a couple exercise answers to a private repo. After a while, I really had to go looking to find challenging enough work to keep me engaged. Books with homework like SICP, FP in Scala, Let Over Lambda, Softwa…
Re: Teach Yourself Computer Science
#174Earlier quoted context omitted.
To be fair, this isn't "teach yourself the skills necessary to be successful in a development job," it's "teach yourself computer science."
I'm being sincere when I ask: what would you do with a self-taught CS background? I understand many of the larger companies require an understanding of CS principles, but, if not to be a successful developer, how useful is a self-taught CS education? What do you do with it if not software development? In my somewhat limited experience, the more CS-focused folks hold PhDs, and sometimes I feel it's more about the cred…
You know that person who you always go to when your program malfunctions? Or the high level engineer at your company who also seems to know how to diagnose a site incident or other strange software problem? What about the technical founder who leads a startup to do something new and extraordinary? Or how about the person who wrote your framework/language of choice? These are people who understand CS fundamentals, irrespective of whether they have a formal CS degree.
Re: Teach Yourself Computer Science
#175One thing I'm always amazed by when casually talking to people about what I do is how they don't think they can do it. Many people think that software engineering and programming are some inscrutable thing. Sometimes I try to tell them that it is nothing special, it doesn't take a mega genius or math expert to do it. That the most important skill is just being able to solve real problems, soft skills and breaking pro…
Re: Teach Yourself Computer Science
#176Earlier quoted context omitted.
I'd never heard of OSSU, thanks. The maths courses linked in that are good, too.
The OSSU curriculum has a nice selection of textbooks. However, I am concerned with the fact that these curated lists lack a unifying idea of what CS is. If you go to pure math instead, the consensus is clear. A pure math bootcamp, like Math 55, is mostly linear algebra and real analysis, taught from Axler and Rudin in its current iteration. Simpler math curriculums progress more slowly, or use easier textbooks, but…
N2T teaches digital logic, what Turning saw, how it was physically implemented and how programming languages were and are developed. TLS introduced various topics like the halting problem in an effective and playful manner. Both spark interest, something I find some maths courses fail to do in many people unfortunately.
Re: Teach Yourself Computer Science
#177Re: Teach Yourself Computer Science
#178Re: Teach Yourself Computer Science
#179Has anyone here learned a subject by going through one of these "teach yourself" lists? I've learned most of what I know about computers on my own, but it wasn't from following a list of textbooks. And when I've tried to follow a course like this for other subjects, despite my initial interest, I've found myself unable to make it through more than a couple chapters of the first textbook before running out of steam. B…
I have no idea how I'd make someone interested in these things if their mind doesn't pop up such tinkering goals for them.
On the other hand, the above is very inefficient in itself. It is hard to overstate the importance of reading good books, besides the practical learning of the above paragraph.
You need to be able to relate to the topics to some degree, but once you have the hang of it, you can benefit from the years and years of experience of experts and hone your mental models, discover new topics and relations across topics and understand things more holistically.
Learning only from books/courses is not sufficient, you won't be able to apply what you learned if you don't constantly try to map from what the book says to something you are already familiar with a little bit.
But you have to pick good books. Bad books can be more confusing and discouraging. I think American CS books especially from MIT Press are really high-quality. They may be expensive (but there's LibGen).
You may also have problems with delayed gratification. The benefits of an hour spent on reading a textbook will be vague, uncertain and delayed and often hard to attribute to the book. One hour of watching Netflix or Youtube or browsing through 20 genuinely interesting links from HN feels more rewarding. This is a big problem for us all in today's attention economy. You need to be very conscious of this to break out of it.
Re: Teach Yourself Computer Science
#180One thing I'm always amazed by when casually talking to people about what I do is how they don't think they can do it. Many people think that software engineering and programming are some inscrutable thing. Sometimes I try to tell them that it is nothing special, it doesn't take a mega genius or math expert to do it. That the most important skill is just being able to solve real problems, soft skills and breaking pro…
Seeing a very non-technical friend of mine being completely immersed in games like "Factorio" and "Satisfactory" where the entire game is essentially just putting constantly more complex and valuable resources together in automated ways is fascinating to me. He will talk about efficiency ratios until someone stops him, and when he's not playing he's reading wiki articles to better understand the problems he's presented with. The sheer look of glee and pride when he gives a tour of all the automation around his base is infectious, and although he doesn't share my amazement at my conclusion, I can't help but think that he's already doing what most engineers I work with do every day, and he doesn't even realize it.
Sometimes I feel like there's so much untapped potential out there, people that would have loved to get their hands dirty with micro-controllers, soldering, programming and all the other stuff that could help them solve real world problems, but they were just never given the chance. They never had the mentorship or the right context to develop those skills. Instead, most programming is done under soul-crushing enterprise conditions, and a lot of teaching about programming is (understandably) only about whatever will benefit you in the workplace. When you're an adult, there's no time for play, so most programmers I know would rather do anything but write code and solve problems when they come home from work.
I'm not sure what my point is here, but it is interesting how people look at programming and software engineering as something so inconceivably complex. The way I see it, it's basically just digital plumbing and carpentry, as long as you know how to use the toolbox: and most people will never even try it.