- The mental muscles involved in the act of making software tends to be those that mature the latest, around 25--30. It is also the case for comprehending the concepts, because in the end software is mostly about "human rules for doing things" rather than "how things are in Nature, deal with it however you can".
- The proportion of the total corpus of knowledge probably has the highest online-availability of any technical fields, rather than being completely locked-in to academic intitutions.
Making a bunch of apps isn't going to provide a solid foundation in CS which usu. includes topics such as linear algebra, discrete mathematics, calc (at a minimum differential and integral), data structures, algorithms, etc.
For example, I've been using json as a database (instead of just, you know, using an actual database) and the python json module was annoyingly slow so I wrapped the boost::property_tree library in a python module. Every once in a while I'll use it to learn some new python C-API thing so now it has all sorts of bells and whistles which are totally unnecessary for my use case. I just looked and I've been poking at that thing for almost six years now, huh.
One thing I've been having a lot of fun doing lately is arguing with to robots to try to get them to write good code for some projects I've always wanted to do but never gotten around to. Not saying this is a good way to learn C but they are pretty good at answering questions on why they did something in a certain way -- which isn't always a good way or even the right way -- so I've been learning a lot more about C doing that. Though, honestly, it would be faster to just write the code myself a lot of the time but...
If I were to start over (I learned to code "for reals" in my mid-30s) I'd probably learn one of the fancy newfangled languages like Go. The only real reason I know python is blender uses it and I used to hack on blender so, ipso facto, I learned python. While knowing how to hunt down segfaults like a truffle pig is a good skill to have I'd say it's one of those things which you don't really need to know anymore, I've shelved quite a few things before I learned to do that and it's more fun to end up with a working project than a broken, I'll get back to it later, project.
That sort of thing that would require you to run a bunch of commands and that you have to do from time to time. Automating it to a single script is cool.
I have a friend that wrote a bot to track the prices of stuff that he wants to buy and messages him on Telegram the current price and the min/max since it started running. Another fun little project.
I was at the time downloading a lot of porn pictures but the internet connection was slow and unreliable. And that's how I learned the Ruby programming language with its regexes, how to parse HTML with those regexes, parsing CLI arguments, and how to download files and put them in proper folders. It was the cleanest and best script/framework I have ever written.
The moral of the story is to find something to do, and it will show you a lot more.
Writing blog posts like this is a form of procrastination, and distracts from your stated goal.
They have built something and they have used that something to shape a plan for achieving their goal. "Stated goal" and "just do it," are mutually consistent with "writing blog posts like this..."
Edit: and algorithms
I'd recommend finding a MOOC course that covers some of the fundamentals of computer science to make sure you have a really solid grasp of the fundamentals - the whys and how's etc. Data structures, algorithms, networking, databases, design paradigms (so Object orientated Vs functional Vs whatever), testing etc. If they use multiple programming languages in different classes then all the better as I think learning more than one makes it easier to grasp the principles at a more theoretical/abstract level and not just how language foo does it and you'll find your favourite language(s) eventually in your own time so don't give up if the class is in a language you don't know/like.
It's tempting to use AI - I'd recommend you think of it as a knowledgeable friend who you can ask questions - is there a better way to do this/what alternatives are there? What does this function do? Why does this code do this and not that etc etc. You won't learn if it just implements for you, but as a learning companion you can bounce ideas off of or help you out of a rut etc it is great.
It is tempting to concentrate on like a React Bootcamp or whatever to get "practical skills" to start going off and building things, but I think that is like the difference of being the person who is paid to only assemble flat pack furniture following instructions vs the person who is paid to design the flat pack furniture and all the smart little fittings and how it all goes together and will it be strong enough and fit in the box and meet the price point and look like what the designer wanted it to look like and so on.
Finally, don't worry about writing "bad code" or bugs. We all do it from time to time and no one is perfect.
I will keep your advise on AI in mind.
A friend who will randomly lie and mislead you in ways you can’t detect. Might be better to use ai for stuff like writing tests, summarizing data, and other low level stuff one can effectively supervise and where errors are low impact.
I would not treat current llm based ai models as an expert or a trusted friend but as the exact opposite, an unfriendly fake-expert. Unfriendly fake experts are still extremely useful if they work for free and can be scaled up, so definitely op should use ai, but he should never trust it.
Both humans and LLMs may know more than you and may have additional perspectives and experiences to draw on. Just like you'd not trust a knowledgeable friend to be omnipotent and 100% correct 100% of the time when you ask for advice, neither would you an AI.
But the point I was trying to make was to not use AI to implement things for you (even tests) as you're not going to learn if the AI is doing the repetition for you. You can supervise yes, but only when you've been there and learnt the ropes already (i.e. when you are already an experienced software engineer and know the details)
Good luck with it!
That people who haven't even reached middle age yet are already mindful of ageism when it comes to reinventing themselves is just crazy. There's something messed up in our culture around age. It's one thing I enjoyed about chess growing up. Chess clubs are one of the places where you genuinely meet people at every age and skill level and they don't feel like they need to justify it.
Some advice for the OP:
1. Don’t give up working. IMO, a job provides structure to the ADHD and keeps you moving forward instead of spinning your wheels. Change job? Sure. Work 25 hours/week? Sure. Not 0 though.
2. Before you start on the projects, spend some time learning how to design programs. I like HtDP.org but it’s kind of oriented to a class setting.
3. OSSU could be the project of a lifetime. Beware getting sucked in there. That said, some of the courses referenced are excellent. Knowing ALL of them is a lot.
4. Have an exit plan if you are not working. When will you work again? Some bad scenarios are less horrible if you are ready to jump back into the workforce.
1. I agree. I am still working on the community project which my wife is building - it has started to grow and looks like it has the potential to become a sustainable source of income. I have built the website and automated some stuff for her. I am also honing my skill as a woodworker and toymaker - learning to make wooden toys.
2. I did the HtDP version of the program hosted on the edX platform. I enjoyed the whole program and it was very insightful on how to think about creating larger and complex programs. It also motivated me to read the SICP textbook - I've read a couple of chapters from the book. I also adapted the HtDP program in Hindi to teach village girls here for a local non-profit on how to code.
3. I agree about OSSU. What I don't like about OSSU courses is retention. I did the Programming Languages (A, B and C) course by Dan Grossman a few months back. I enjoyed the course and the exercises - but I am not sure how much of it I retain today. These and the HtDP program has definitely helped me to think what might be happening inside the hood of programs rather than treating them as magical boxes.
4. I think I can keep exploring computers while simultaneously make my living as a woodworker / toymaker. It also helps me balance my faculties of mind and my hands /body. I am not thinking of an end goal at the moment but want to keep exploring and potentially building.
It’s been difficult talking with people that have made the decision to go into development, because it’s a weird and risky occupation right now.
An analogy would be wanting to become an artist, so you learn your way into a field position on a semi-pro baseball league where artists play baseball. Some players come up with their own unique spin on the ball as they throw it, others attempt to swing the bat the way they’ve been told. Older players may have advice, but not play as hard. The goal is to just make points, and new players are in awe of the artistic ways they could become great and make bank. For years and years, players would get injured, fired, or just age out in their thirties, because you rarely ever saw anyone older; there were some small old person leagues, too, I guess? And older players might become managers, coaches, owners, sports journalists, or just leave the profession. They just kind of disappear- people are only thinking about the game. But, within the past several months, players have started working independently with robots on the field. The companies making the robots swap out new robots every few weeks which compliment the players and play something that seems like baseball, but often isn’t. People worry that robots seem to be attempting to takeover the jobs of the players. They mostly hit some runs when no one is on base, but they create holes in the field in the process. People don’t understand why the players are either micromanaging the robots or are spending time filling holes, because the robots score points, and they’re focused on the scoreboard.
Does the artist belong on a baseball field?
Is there a more efficient way to score points?
A good student finds teachers everywhere. The converse is true too. The drive & patience are the most important things.
Take one problem - solve it end to end by first principles. You’ll do great.
More than anything, what a self-starter community-taught coder needs is motivation, curiosity, and access to resources. It does not matter where you begin, so long as you have enough stuff to take the next step.
OP, as you've said so yourself, the places you can go are vast! And it's no small thing to have already made working things! Now is the time to play, discover what you like and don't like, start projects and abandon them, go down rabbit holes, get stuck and frustrated, to over-romanticize, to become bored, to feel like an imposter, to become jaded but then to be inspired again, and to experience the magic of making.
I wish you luck and thank you for sharing. I'm excited to learn from you!
>I am mindful of the ageist tendencies in the tech industry [...]
These two claims seem at odds to me. If you're not aiming at getting a job, why does it matter to you what the tendencies of the tech industry are?
Also while I would not start a project in C understanding the memory model and how to implement basic data structures in it is s.th. every programmer should know IMHO.
Looking back what has helped me a lot is being surrounded by more experienced engineers that were good at teaching (those are quite rare I discovered later). Other than that, read a lot of code, write a lot of code, and keep reflecting on what areas to further develop. Be kind to yourself, this space is huge and no one’s is an expert in all of it. Burn out is real, especially when struggling alone for too long. One thing that has helped me as well is to realise everything in software engineering has been made by humans. None of it is actually ‘unknown magic’, just keep digging deeper to find out how the thing you’re struggling with works on a more fundamental level. The LLM age has made this so much easier.
Thank you. I will keep these in mind.
Your journey is a source of motivation as well.
From your objectives, I don’t think you want to learn computer science, you want to learn how to be a full stack software developer.
Learning certain aspects of computer science may certainly help you, but it’s by no means a prerequisite - and won’t help you to actually build things.
Learn the things you aim towards by doing and reading domain specific knowledge.
Computer Science is fascinating and wide, but if you're interested in reskilling into a new, professionally profitable sector, veering too much into the theoretical aspect can prove detrimental.
However, as you mention, your objectives will adjust the more you come to learn, so it's important to keep an open mind and read more widely than just the next necessary thing.
Just beware of ADD side-tracking you, and have clear road maos. (Speaking from personal experience there, I always have to keep a check on my direction during both study and work, lest I lose too much time without much benefit.)
Speaking of roadmaps to study, perhaps this site can provide an early guide, augmented by books and courses, for your chosen field:
And don't let your age deter you. People who love what they do are rare and priceless in any age range. If a company doesn't want to hire you due to your age, then that's probably a company you wouldn't enjoy working for anyway.
- the Python courses got me up-to-speed on the basics of that language: https://ocw.mit.edu/courses/6-0001-introduction-to-computer-... and https://ocw.mit.edu/courses/6-100l-introduction-to-cs-and-pr...
- Structure and Interpretation of Computer Programs served as a disciplined review of a book which I wasn't patient enough to do the exercises of when I first read it: https://ocw.mit.edu/courses/6-001-structure-and-interpretati...
- Mathematics for Computer Science helped make up for my spotty math: https://ocw.mit.edu/courses/6-042j-mathematics-for-computer-...
I've also found the recent book:
https://www.goodreads.com/book/show/39996759-a-philosophy-of...
very helpful (first reading I did one chapter at a time, re-writing my current project applying the principles of that chapter) --- interesting video overview at:
https://www.youtube.com/watch?v=bmSAYlu0NcY
If one is fortunate, there are videos on specific subjects/algorithms which one needs, e.g.,
How did you start on these resources? Did you start reading them because you needed them in your current project Or did you read them because you thought they will be useful for your project?
For the balance, I managed to get a working version of my project pretty quickly when the Python version of OpenSCAD first became available: https://pythonscad.org/ but I quickly hit a plateau and was having trouble adding features and improving it, so I began researching and trying to learn what I needed for:
https://github.com/WillAdams/gcodepreview
Been collecting lists of the books I've been using at:
https://www.goodreads.com/review/list/21394355-william-adams...
https://www.goodreads.com/review/list/21394355-william-adams...
I will note that my preference (as a person coming at this from (La)TeX is for Literate Programming:
http://literateprogramming.com/
so have also put together:
https://www.goodreads.com/review/list/21394355-william-adams...
Well, in my part of the world - there are entrance exams for good colleges which can be cut-throat.
One advantage you have over senior developers is that senior developers need to be generalists, you have the opportunity to go deep. It is entirely conceivable you could learn Postgres, JavaScript, or Python better than someone who has been programming in those languages daily for over a decade simply because they have a lot of other things to worry about. They can't read the manual cover to cover, no time. You can. Being a deep specialist in a technology has a lot of value.
If you find a programming community you love, start going to conferences as soon as possible. There are often financial opportunities available for new developers.
This is not going to happen overnight. In most cases to get proficient you can expect that working 3 hours a day, 3 days per week, it will take you about 3 years to reach a point where you might be employable -- although you will probably find you need to put in more time than that. But you can reach a point where it is enjoyable before then.
Good luck.
I’ve started to see this myself. I’m certain it’s ageism.
To the OP, if you’re passionate about it, don’t let anyone/thing stand in your way.
Then it's just a matter of speeding me through the interview until they can find the candidate with the "right team dynamic" or "culture fit" etc. The excuses I've heard are quite amusing, but transparent.
I started programming when I was five years old, so I kind of fit the "whiz kid" profile that everybody thought all programmers would be back in the 80s. But one of the things I've noticed, is that unlike the situation, say, in Boston, where it was easy to find other former "whiz kids", when I attend tech meetups near my current city what I find is that almost all of them started programming in mid-adulthood, say mid-thirties to forties. Many of them even went to the same boot camp. But the joy and wonder they experience mirrors what I experienced at age five, poking at my Crazy Eddie's-issued VIC-20. I am utterly delighted by this discovery, as it lends further credence to the idea in my head that programming is something deeply satisfying to the human soul.
To be honest, what I hear in the paragraphs that follow is less a description of yourself than the pronouncement that you are capable, curious, and driven to learn more, that you're excited and motivated by the breadth and depth of tech -- that there's so much to learn and so much to study and you want to know all of it. That's a wonderful starting point, but it also sounds as though you are or will be prone to a kind of paralysis.
You have a list of projects you want to work on. This is good. Study will give you a foundation (personally, I found DS&A, once I approached it methodically and patiently, by far the funnest part of learning programming and CS, so projects aren't the only way), but building will give you something to put on top of it, figuratively speaking.
Just keep on mind that you're probably not going to build these things from first principles, so you're probably not going to learn operating systems, networking, or programming languages. Rather, your going to develop skill in specific tools rely onthose technologies. That's fine. But if you really do want to dig very specifically into the subjects and technologies themselves, then you needto be aware that building the products or projects you've described isn't going to give you the progress you seem to want.
If you really do want to know networking, don't build a website; implement, I don't know, telnet or tcp/ip from scratch after reading the spec. If you really want to know operating systems, build one. If you want to understand programming languages, DS&A, and algorithmic analysis, familiarize yourself with some instruction sets; learn discrete math; learn what lambda calcus is and how it's used.
> Adult ADHD
I have severe ADHD. I could not survive in the tech world without treatment and medication. YMMV, but you should get treatment if you haven't already. Last time I checked, there was essentially no empirical evidence supporting the coping strategies so many people advocate. Medication is the one, and the only, proven treatment for the condition.
I won't speak for OP, but from what I've been able to figure out locally, it's quite difficult (will take years and is largely down to chance, and anything you might to do help the process along is inhibited by the condition itself) to even get a diagnosis unless you're quite wealthy and willing to spend a chunk of it.
Even when you have the diagnosis and medication, getting effective treatment can by itself take years. The person taking the medication needs to understand its effects and be able to tell the doctor, in a manner that makes medical sense, "no, this doesn't work" when it doesn't work. I, for instance, suffer from overwhelming bouts of uncontrollable rage when I take Ritalin. The resulting damage has never been inflicted directly on the people around me, but it has strained or broken relationships and cost me thousands of dollars, at times when those costs were particularly onerous. One might expect this side effect to be immediately obvious, but it wasn't. I figured it out years after it started.
In turn, I had to notice for myself (a) that amphetamine salts are not the same thing as Adderall and (b) that I was incapable of functioning when I was taking them. I then (c) had to bring this up with my doctor, and (d) be able to point out that I had been fine six months prior, when I was taking brand-name Adderall XR (fortunately, because I have severe ADHD, I hadn't disposed of old rx bottles). She then discovered that my monthly urinalysis results had shown, since my pharmacy switched me to amphetamine salts, that I was excreting none of the expected amphetamine metabolites. As far as the urinalysis was concerned, I wasn't taking an amphetamine at all. ("Yes, dr, I have been taking the drug daily. No, I haven't been selling it.") So she then had all the information she needed in order to make the judgment that I needed a different drug.
Effective treatment of psychiatric conditions, in other words, can depend to a great extent on the ability of the patient to recognize, evaluate, and demand effective treatment. Novice patients rarely know how to do that.
Well, it is the only post on this person’s website, I bet they wrote this because they wanted to set up a blog and needed content. I thought their enthusiasm was heartwarming personally, imo the drive OP is expressing is the most important part of starting with CS stuff (maybe any hobby?)
> or of posting the post here is
Maybe they’re uncertain deep down whether or not a 37 year old can actually learn computers? I have the same insecurity with learning to play piano.
> Just keep on mind that you’re probably not going to build these things from first principles
Does anyone, truly?
Really though, all of OP’s aspirations seem reasonable to me, I think your post is a little too negative and discouraging. Making a HN-like webapp, esp for a small group, is a trivial demo exercise. The streaming device could just be a raspi in a custom case, but OP could go as far as building a custom board as their interests guide them. The education app and ecommerce sites are just further skill reinforcement w/ the HN site idea. OP even has ChatGPT to answer questions, I would have killed for someone or something that could answer my questions when I was learning.
Mostly responding because I felt bad at the idea of OP reading this and thinking they’re actually limited in achieving their goals. You’re right to caution against taking on too big a challenge up front, but OP _can_ totally chase their curiosity and dig into details as far as they are drawn. OP, if I was you, I’d try to build a “quick and dirty” version of whatever project idea(s) most pull at your soul before you get too into the weeds, otherwise all that nitty-gritty detail just feels like mind-numbing trivia.
Seeing the mention of ADHD set my thoughts on a rather different track. The lack of focus becamein retrospect much more the defining characteristic of the post -- to the point that the post itself doesn't seem to know what it is or wants, or at least fails to communicate that. (This kind of obliqueness is, to me, one of the hallmarks of ADHD.)
But you're right that just as a statement of goals and ideas, the post is a wonderful start. And I forgot completely to include this: the fact that OP is self-taught is encouraging. That's basically all he needs. It's invaluable and will serve him well, regardless of what he decides to do.
You can get one of these ideas _done_ at a basic level, including learning time, in about four months.
Start with Laravel, use Livewire, and use Laracasts as a starting point.
You got this!
We turn away the latter more and more these days. In the past, hiring a junior software engineer meant you were probably getting an enthusiast of some sort, the kind of person who had their own side projects and crazy ideas they worked on for fun, and would stay up late into the night just coding. But now with the surging supply of new computer science grads, there’s a lot of people that just want to log in, crush tickets, and go home. And AI is making it worse. They have no love for the science, just a steady paycheck. But the truth is that in this industry, if you really want to push the boundaries of what is possible, love is an important ingredient. And not just for your company, but for yourself.
We turn to jobs too fast, too. People starting to code at age of 37 should create companies, apps, tech, no count on a job. There are too many people in tech looking for jobs now, 20 years ago a much bigger % of people in tech were creating jobs.
Jimi Hendrix never learned to read music. He did not know how to 'construct a chord'. He had no music theory training. He just made music, and learned what he needed along the way to make the music he wanted. He did this from scratch in less than 12 years (ages 15 to 27).
TL;DR: computer science and 'building things' are two different things. Let your urge to build things and your interests guide what and how you learn, not academic traditions.
Learning CS means starting with the math, particularly for folks long out of school (the famous quote, "Computer science is no more about computers than astronomy is about telescopes"). If that doesn't sound fun then you probably just want to spend your time with coding tutorials instead. CS is... a science. Software is engineering.
heyak•7h ago
chbkall•4h ago