Maybe the fact that you figured it out is an indication that it doesn't have to be taught in a CS curriculum. Most of the things that you mentioned have great documentation and tutorials outside of the classroom. The fact that so many people use them without them being taught in schools should be proof enough. I think the current situation makes sense -- Computer Science education should focus on teaching the fundamentals of algorithms, data structures, discrete math and how to think conceptually about problems without regard to implementation. By learning about data structures and the like, you indirectly learn how best to use memory, redis, MySQL, write servers and whatever else.
A data scientist is a statistician who can program or a programmer who understands statistics at a high level.
It's amazing how few CS people become data scientists, I think physics and economics degrees are the most common degrees among elite DSs I know.
but it actually makes a lot of sense - it's relatively easy to pick up coding. In fact, it could be the best-taught skill on the internet, there's no shortage of material for a person who wants to learn to code. I think that most CS people don't learn enough statistics to really pursue DS and a ton of people with advanced stats knowledge can pickup coding relatively easily.
Now when I talk to kids, I tell them that if they want to go to college, they should try to learn something they can't learn on their own.
I wish more CS/programming classes, particularly pre-college, were game-oriented. A Java course I took in school had us writing a 'database' command line app that held fake enrollment information. Had that kind of thing been the only exposure to programming that I was given, I almost certainly would not have entered the field. But show someone like me a way to automate or expand something like Runescape or Minecraft? That, I'm interested in.
Me neither. That said, in retrospect, I believe university is more similar to real jobs that people give it credit for - the tedium only gets worse in a typical dayjob. As much as I hate "fake enrollment DB" exercises, they're pretty accurate description of how the work looks like.
(I used to want to go into gamedev professionally; due to various life events I went a different way. Judging by stories from both HN and IRL people I know from the industry, I may have dodged a bullet here.)
Yeah, you can get there that way but it’s a slog, and the reward is a long way off. That’s not like work. At work you get a regular paycheck even if enrollment DB isn’t thrilling.
I saw an open source class called nand to tetris where students had a semester to create a machine that could play tetris, starting with only nand gates. I thought that seemed like a much more fun progression for computer hardware than the undergrad courses I took. I would love to discover something similar for programming but so far I haven't found it.
Simple 2d game
To do app
Timesheet app
Implement a clone of x with something extra of your choosing
Top Twitter celebrity app using its API
Building a search engine
Creating a programming language
An issue with the programming courses at my uni was that none of them used a database. The programs were toy apps by design. Instruct students to use sqlite or MongoDB, and encourage them to use PostgreSQL/MySQL.Our database class did use databases, but we had no integration of the two subjects.
Creating the 10000th Conways Game of Life? Developing some crappy game on my own? No, thanks.
Developing something for an existing game? That would have been great! I'm all with you.
Soon after, I got into a French MMORPG called Dofus and I absolutely loved it (maybe even a bit too much?). But since this was an online game, there was no cheat codes for it. After days of searching on the internet, I joined a few small communities of other kids that were learning programming in order to write bots for that game.
It was so much fun, and got me to learn about so many aspects of programming: reverse engineering, network communication, "AI", pathfinding, complex user interfaces, RSA authentication, security (the game had a lot of anti-bot technology), making a lexer/parser in order to have my own scripting system for users and so much more. It was messy and I kept rewriting all my code as I learned better ways to do things, but it was so rewarding having hundreds of users and a community around it.
I am now a professional programmer thanks to this, even through what I was doing wasn't particularly ethical or fair towards other players and the devs of the game. But I was too young and was having too much fun to understand that. I stopped once a friend got sued by the game company for making and hosting a server emulator.
Fortunately, "moddable" is a genre and people want it, so it can't be killed completely. Kind of like how adding IAP "makes more money", but "doesn't have IAP" is a genre people want, too.
I understand things change, income is different between jobs. I am not passing judgement on the fact that you transitioned away. It would be awesome if teachers were paid as well as a web dev.
As a teacher, I was working 70 hr weeks to get lesson plans in place and to grade work. Summers were booked for summer school. Every minor "vacation/break" was filled with catching up on everything. I worked with socio-economically challenged inner city kids whose families (generally) saw no benefit to an education. The pay was terrible. After 5+ years and if I were not the sole income for our household, we might have been able to eek by. As it was, we were in a debt cycle that we could not have escaped. I would never have been a home owner.
After becoming a software developer, in my first year, I made as much as a teacher with 20 years experience and a doctorate. Fast forward several years, and I out earn superintendents. I can actually have a mortgage and plan vacations with the family and help my kids with expenses.
This comment sums it up => "I'd consider it if I didn't need a four-year degree.", (https://news.ycombinator.com/item?id=20101794)
The type of work, though, and skills required are quite different, regardless of that they technically both develop and involve 'technology'. Semiconductor lithography requires a pretty exciting mix of skills starting with plain physics (classical and by now a bit of quantum optics), materials science, mechanical engineering, data analysis/science, software engineering (both for simulation and analysis of production of lensing systems), and I'm sure I'm missing half. It is quite different from "writes software for a software company", which is the framing I had interpreted from the comment I originally responded to.
1. Pay
2. Professionalism - all of the teachers I saw and talked to under 65 were treated like dirt, and were micromanaged instead of being treated like professionals
3. Barriers to entry. By the time I got my Master's and decided I'd rather teach high school than spend several more years getting a PhD, it was financially impractical for me to go back for more years to get a teaching degree. It was also very difficult to find internships and open positions. One guy I know who did a straight teaching degree interviewed almost a HUNDRED TIMES despite doing incredibly well in his program and student teaching at a prestigious high school.
I'm sure the kids are doing fine without me, but I had stellar reviews from every kid and parent I ever worked with, and from professors I TA'd for. People have told me my whole life I should be a teacher (came up again just the other day with the guy I was pair programming with). I'd happily take less money to be a teacher, but when you add in factors 3 and especially 2, it just isn't worth it to me. I'm not going to suffer a bunch of professional abuse and take a financial hit to boot to do something that my society doesn't seem to genuinely value.
However, you might be interested to know that the most successful business in my neighbourhood actually operates an online high school. A friend of mine in another city also operates an online high school and seems to be doing quite well for himself. There appears to be a large market for such services.
Especially if you also have web development skills, the internet provides a platform to be a teacher independently, resolving the second and third points. The first point probably depends on your business skills. However, seeing how well that aforementioned business in my neighbourhood is doing, the potential upside is huge.
It doesn't even have to be programming. One of my best friends started doing little gigs for clans/teams and designed their websites. Each game had its own little eco system back in the days where you could offer/buy anything from scripts, to websites and skins.
I wrote a plugin to fix an issue we had on our server, then got asked to do some work on the server's website to show news and in game stats.
Wound up on the admin team helping to run it. Built a number of plugins for it. Learnt a lot of Linux/ server ops through it, and the importance of backups.
And it helped me get a job. I showed off an Angular based editor I wrote for one an achievements plugin. The plugin exported data on available triggers and rewards ("is person in this area", "do they have this item equipped", "give them this item", "spawn this mob near them"), and the editor turned this into a GUI anyone could use to quickly make/edit achievements.
Back in the day, I actually talked to somebody in one of my C++ classes who made (IIRC) around $50k in a year running some kind of gaming server. I looked into it at the time, but it didn't seem like my cup of tea. I might revisit the idea. I suspect that these high-dollar figures are outliers, but it could be a good way to get the kids some valuable real-world experience and maybe they can make a few bucks so they have a little bit of spending money.
Before making a server, I thought coding was cool, but had never done much beyond running some basic programs. Making a server gave me clear goals that helped me learn coding much faster. "I need to figure out how to add custom bosses so my server will be more fun!" is much more fun and interesting to a teenager than "I need to figure out how to remove a Car object from this list of Car objects". There's also the very important social aspect - seeing other real people enjoy code you wrote is extremely satisfying.
And you can do really cool stuff with servers that teaches you real things, moreso than any class could. My own experience writing a ton of custom code for my Minecraft server taught me things like Unix, Redis, MySQL, web dev, reading obfuscated code, networking (like running 8 servers and writing code to pass players from one to another), deployment, basic security, pathfinding algorithms, writing scripting engines, etc. etc. all of which I had no experience with before, and would not have learned for several years otherwise. I'm graduating with my master's in CS now and still haven't been taught in class many of the things I had to figure out to make what I wanted to make. The few other devs of big servers that I knew had similar experiences - started off as beginner programmers, and gained a huge amount of experience from building out a passion project.