6 ms·
Ask HN: CS grad who barely knows any CS
I (m, 23) will be graduating from a university in Kenya with a CS degree at the end of the year. However, I feel like I barely know anything. I hardly attended classes in my first and second year. I upped my grades in my third year and was even among the top in the class (anecdotally). To be honest, I’ve always felt like our CS course was inferior. For example, I did a Computer Graphics course, but we didn’t even implement line drawing algorithms. My favorite courses were compiler construction (we actually built a compiler) and distributed systems.
I started checking the sources of web pages in high school, and even learnt rudimentary JavaScript and PHP. After high school, I was hoping to join a good uni in the US. I got a relatively decent 1490 in my SATs then bungled up the rest of the application process. I hesitantly joined my current uni. I’ve been coding on and off since then. For school, I wrote introductory assembly, C, and C++: most of which I can’t recall now. Outside of school I learnt Node.JS, Python and Go. I haven’t built any large project: my biggest code base is probably my FYP React Native app or the Vue/Flask web app for my internship.
On paper, it appears I know quite a few technologies. But contrary to that, most of it has been surface level knowledge. To use a friend’s words, I’ve been turning buttons from red to green (doing CRUD). I don't know how databases work, I don't know what exactly ray tracing is, et al. I started applying for jobs last week. To my surprise (or not), I do not fit cleanly into the requirements of any of the junior listings. I can't solve the "easy" problems on LeetCode and my score for the AngelList Fullstack assessment [1] was 18/30. I rather objectively believe I have some gaps in my CS knowledge. I am even considering a boot camp—if one exists for people who already know what a variable is. My tentative plan is to get a part time job, and then spend 6 months reading books, learning tech I’ve always wanted to learn, and hacking on at least one build-your-own [2] type project.
So, how can one effectively fill gaps in their CS knowledge? It’s worth noting that I am overwhelmed, and even procrastinate when I don't have an overarching framework (like school). So it’s not as simple as just sitting alone and studying/coding. I am the "smart" kid who didn’t have to study throughout most of school, but who's "discovered" you have to sit long hours now to be competitive. Is my situation more common than I suppose? Should I suck it up, get a technical support role and build up from there?
[1] https://angel.co/assessments/full-stack-web
[2] https://github.com/codecrafters-io/build-your-own-x
- DonHopkins 4y agoYou have a rare and valuable skill, which is a great deal of self-awareness and the ability to see where you need to improve. An rocgf rightly said, you are young and have a lot of time to learn, and the learning never stops, and takes a long time. Relatively few people your age have the advantage of not thinking they already know everything, or appreciating how infinitely much there is to learn! ;) Peter Norvig wrote a great paper called "Teach Yourself Programming in Ten Years", which asks "Why is everyone in such a rush?" https://norvig.com/21-days.html https://norvig.com/21-days.html You can't learn everything, so it's good to choose something interesting to focus on. It might be useful for you to find some specific application areas you're interested in to motivate you to learn programming, like 3d graphics, which is very fun, satisfying, and in demand. For example, I've embarked on an at-least-10-year journey to learn the 3d graphics tool Blender, which is programmed in Python, and has its own visual programming languages (node graphs) for image processing, generating 3d geometry, animations, and all kinds of other stuff. There is no ceiling on how much you can learn about it, and there are lots of great free examples and tutorials. If any of that kind of stuff interests you, then programming Python and node graphs will super-charge your abilities and be extremely fun, too. This is a great tutorial I just went through, and you can find many more on youtube, but this guy has such a deep understanding of what you can do, it's one of the best. The full course requires a Blender Studio subscription, but if you're interested in that topic, it's well worth it, has a lot of other benefits, and is for a good cause (Blender is an open source project, one of the most successful in the world): https://studio.blender.org/training/geometry-nodes-from-scratch/ https://studio.blender.org/training/geometry-nodes-from-scra... There is a huge demand for Blender programmers in many different roles and abilities, including node graphs and Python too! It doesn't hurt that Python is the lingua franca of machine learning, and also very useful for web programming, and there is a huge rich ecosystem of modules you can use that plug right into Blender. So everything you learn about Python will be useful outside of Blender, too. (Although Blender's node graphs are quite unique and specific to Blender.) Another fantastic and powerful visual programming language for learning computer science and programming is "Snap!", developed by professor Brian Harvey at Berkeley. It's easy for both kids and adults to use, but it's not "dumbed down" like some visual programming languages, and it teaches many powerful high level concepts. It's essentially a visual interface to the Scheme programming language, including all the hard core computer science magic like recursion, closures, continuations, Y combinators, etc. https://snap.berkeley.edu/ https://snap.berkeley.edu/ There is a lot of educational computer science courseware around it, too, like The Beauty and Joy of Computing: https://snap.berkeley.edu/bjc https://snap.berkeley.edu/bjc The Beauty and Joy of Computing The Beauty and Joy of Computing (BJC) is an introductory computer science curriculum using Snap!, developed at the University of California, Berkeley and Education Development Center, Inc., intended for non-CS majors at the high school junior through undergraduate freshman level. It is a College Board-endorsed AP CS Principles course. It is offered as CS10 at Berkeley. The curriculum: BJC is available online at https://bjc.edc.org https://bjc.edc.org Resources: You can find information about BJC, teacher preparation, and additional resources at https://bjc.berkeley.edu https://bjc.berkeley.edu Snap is Scheme disguised as Scratch [pdf]: https://news.ycombinator.com/item?id=28337196 https://news.ycombinator.com/item?id=28337196 Snap! 5 is here: https://news.ycombinator.com/item?id=20309162 https://news.ycombinator.com/item?id=20309162 One of the coolest ways to learn programming I've ever seen is the Snap! visual programming language, which is written in JavaScript and runs in the browser: https://news.ycombinator.com/item?id=20310134 https://news.ycombinator.com/item?id=20310134 Here's the elegant Snap! visual Y Combinator: https://news.ycombinator.com/item?id=20312091 https://news.ycombinator.com/item?id=20312091