The hard part here is getting a curriculum to learn software engineering. Writing code is much much more then just a language. So much time spent on that. Just learn one freaking language and move on.
eg. I started with Basic -> QW Basic -> Pascal -> PHP -> Perl -> ruby -> golang and a lot of others languages too.
Well, the Flash IDE itself was a horrible compiler for those who write mostly ActionScript. We used to compile with few open source compilers. I have forgotten the names.
Seems like it’s going to be many years before Objective-C is no longer viable, and there’s a lot of it to maintain (especially Apple’s). I think the only Swift-exclusive frameworks are SwiftUI, Combine, and WidgetKit.
It would be pretty crazy to learn only objective c today, unless you want to go after the legacy market specifically, like someone learning Cobol to get bank contracts.
Maybe it suits some people but for most people it’s sad and frustrating to work with old messy systems in obsolete languages when there’s a shiny new one that’s objectively much better in almost every way.
Here is a little secret, while Swift is the future of systems programming on Apple platforms, there is still plenty of stuff written in a mix of C++ and Objective-C.
In which languages do you think Core Audio and Metal are written on?
To the commenter's point though, Swift is the relatively easy part. UIKit throws you into the deep end right away, it descends from AppKit from native Mac app development and doesn't try to progressively disclose complexity like SwiftUI.
Did you mean GW-BASIC? Or maybe QBasic? Or perhaps QuickBasic? By the way, I have archived these obsolete pieces of software from MS-DOS era at https://github.com/susam/dosage (search for Basic in the README) if anyone wants to try their hands on them again.
To some extend the engineering part is emerging: when a code base grows it becomes necessary to learn technics to factor it. What I find really time consuming when using a new language is searching for its API.
Yeah that's quite an interesting take. This is the first time I've seen someone come into programming with their first real learned language being Rust. I'll be awesome to see more of this in the future. It gives me encouragement to properly learn Rust as well (my problem with learning languages is that I never actually want to write anything in any language so I can't actually learn the language without finding a use for it).
I’m the same way, I study other things and hope for the day to have to learn a more interesting language than the ones I’m paid to work in. But at the end of the day, taking a step back, there are a good deal of more helpful things for a professional dev to learn than languages he or she isn’t writing anything in currently.
> (my problem with learning languages is that I never actually want to write anything in any language so I can't actually learn the language without finding a use for it).
This also seems the author's problem. It reads like he feels he should ought to learn programming but he doesn't actually have any particular problems he wants solved.
Well, in that case on should look at existing learning materials. Maybe something like Project Euler, advent of code or a good old fashioned dead tree (book).
Project Euler is so wildly overrated. Not everyone loves number theory, almost nothing in programming is number theory, and yet a large portion of those problems are number theory.
I'm in this boat. Finally started programming in 2018 at age 38 after a lifetime of playing around with computers as a hobby (thanks, dad!) and a first career in a completely unrelated field, as an attorney.
The linked article is about learning for pleasure, but there are also challenges associated with trying to enter the field as a second career. The technical complexity, of course, and the scale of what needs to be learned, can sometimes be overwhelming. It helps to bring as much humility to the process as you can muster. But peoples' perceptions can also be a challenge - no one quite knows what to make of you!
I like to think it's an opportunity. If you're able to combine domain expertise from your first career with a solid grasp of CS fundamentals and a good day-to-day working knowledge of your toolchain, that can make you a pretty rare interdisciplinary candidate. Perhaps that then informs how you market yourself and to whom.
Best of luck to anyone coming at this as a second career!
I have a friend who is an attorney that's fairly technical - he can't write code but he understands how it works when reading it. He does combine his interdisciplinary skill - started a company in his main domain using software as a tool. I'm constantly impressed by him.
I thought for a moment I blacked out and posted to HN without knowing it. I too am a 38 years old attorney who learned CS/Programming late in life. I haven’t had any success in finding relevant job openings for my particular coding knowledge, but I keep looking.
Just knowing you exist gives me hope I may still be able to break into tech, at some level. And given that Hurricane Laura just decimated my city ( and my home and my office) I need some hope right now.
Well, being an attorney you could dig yourself a nice rabbit hole with Lucene, a Java library for text indexing and analysis at the foundation of many Java based search engines (for example Solr, Elastichsearch.) Combine it then with your expertise to analyze documents from your business domain for example
Knowing people in both the legal and software world, law is a tough profession with old world business expectations. Almost everything is “last minute” due to either court deadlines or your client dropping everything on you because something happened and it has to be fixed now.
In-house counsel jobs can be a bit more relaxing, as you might be working on longer term projects rather than the latest disaster that fell into your lap.
Exactly, I would try to find something in-house. And choose some very narrow field I can be an expert on (GDPR, tech laws, tax etc).
Not saying it's easy though.
Can't speak for the OPs reasons, but some evidence suggests that law schools have created an oversupply of people with law degrees, which impacts career possibilities.
Lawyering is not really the problem, I have a quite successful career. I am mostly content to just program in my spare time and programming/automating those areas of my practice where there is value. But, and it’s probably more specific to my situation, but I do almost exclusively criminal defense work and it can be tiring, I’ve been at it long enough that I could use a change of focus.
Biggest problem for me is that my areas of knowledge/interest for CS/programming is limits solely focused on low level, performance oriented domains, programming language theory And type theory. That is not the most marketable skill set, but I love doing it.
It is, but you have to be quite the expert. It's not like app development where even limited experience can be enough to get by.
However if you like that sort of stuff you can try to become a web develoepr (pick say Python or Ruby) and then become an expert in backendy / performence issues.
I think there's a lot of room for programmers with deep domain knowledge about some topic. If writing software for lawyers or law-related issues, I'm pretty sure experience as a lawyer can be very useful.
Just interviewing other lawyers for their “if it existed I would buy it” software would show there’s a lot of opportunity. A friend of mine has been looking for a service that emails her whenever a local municipality does something with easements/property access.
This actually took me down a long rabbit hole of how local government software is horrible and someone could crush this area — my only concern would be lack of traction as local governments seem to prefer operating in obscurity/making it difficult to hold them accountable.
Funny, I know a guy doing just that, former roommate He was mostly writing code for things that handle municipal water supplies and other water monitoring stuff. He worked for a code shop that built the original system and after he left he kept doing maintenance work on the side until he went (mostly) full time at it.
OTOH, he's basically a one-man show, and has implied that if he had to scale -- e.g. add 3+ people -- then the $$$ wouldn't go as far. By himself it's a decent paycheck, though.
The problem is municipalities are all different, with different state/local requirements, and they often don't have the money or operational depth to support deeply customized software. I grew up near a park that had to shutdown for several months because they couldn't get enough funds together to have people mow the lawns; where would they find the money for custom code?
I am guessing this is one of the situations where you might need to make that niche for yourself.
Take on contracts to do something that is traditionally done with hand -> write scripts to automate it -> take on more contracts.
At that point you would probably be paid for 20 people's worth for 20 people's work....but automating it will allow you to pocket all of it due to zero (low) costs.
Our startup tried doing this with automated 3D map creation for drone use surveying. It is incredibly easy to undercut traditional competition at a technical level. Convincing corporate to trust in your experiment tho, kinda hard. It is the classic: 'No one has been fired for hiring IBM' conundrum.
Have you had any eDiscovery experience in the past? I was an analyst for 15 years and AI is really coming on strong now. I've seen, in my job search, a few places where a JD coupled with a little CS knowledge could be useful. A buddy of mine is a patent attorney and quit his firm job to start his own shop doing natural language processing against the US and foreign patent databases. He didn't get his hands into writing the software but he's had to develop a reasonable understanding to guide his process and sell it.
If you don't mind me asking, why would one give up a cushy, well paid attorney career and choose software engineering? Software engineering compensation _tops out_ below where an experienced attorney compensation _begins_. The least I've ever paid a lawyer was $250/hr.
$250 is generic "business contract review" lawyer. Not any kind of distinguished legal scholar. And I had to look pretty hard to find a decent one that didn't cost twice that.
To be fair lawyers are worth more than senior software developers, but not too much more. That $250-$750 per hour is the business rate not the profit that goes to the attorney. If an attorney works at a large firm most of that goes back to the firm. If the attorney goes out of their own they have personal business expenses to account for.
As a software developer I bring home more than some attorneys I have met. I am not working a FAANG making buckets of cash either.
- Sounds about right. Few friends (Engineering/Tree Lawyers) say you can get a bit more depending on your niche.
- Many Lawyers under bill for fear of losing/surrendering their license [1] or squeeze in their Model Rule 6.1 hours [2]
- I'm seeing more lawyers amass some wealth, get burnt out, and then jump over to more creative or altruistic endeavours with less stress; can't blame them.
I mean, you can say the same about plumbers, to an extent. Many charge $100-200 an hour, more for the first hour, plus travel fee and service charge, and may skim a profit on the parts they use as well.
Either you're an entrepreneur, and your hourly wage has to pay for all kinds of costs, including time not spent working, getting clients, equipment, training blablabla. Or you're an employee and your take-home pay can be completely detached from the pricing to your clients.
When I started my career in a legal/financial firm as a junior my hourly rate was $200 and my hourly pay was about $15, for example.
In those days I also worked a lot of overtime and chargeability requirements will drive you mad. Also in many firms you quickly specialise leading to sometimes boring work. On the one hand every legal matter is different and has its own quirks, challenges and interesting unique aspects. On the other hand, when you specialise in a certain field, you also constantly work on similar cases with similar references and jurisprudence, and you indeed often end up filling in templates for standard letters, contracts, motions etc, because the bulk of the substance will be the same over and over. Point being, the $15 an hour also came with mind-numbing work with unhealthy workhours and poor work/life balance.
That's just one of many stories, of course and all jobs have their issues. Some lawyers have a great job/life. But there's also plenty of people who may enjoy programming much more.
In the U.S. only a very small percentage of lawyers ever get to the point where they make $250 an hour, and even if they do they only have a certain amount of years they can earn that much then if they don't make partner at whatever firm they're at they get put out to pasture.
During the time they're making that much money they're basically trapped working insane hours at one firm. Most lawyers don't even make six figures. Also, they can get disbarred if they make a mistake.
Software engineering allows for higher earnings for your entire career (though the ceiling might be lower on earnings), is less stressful and doesn't demand as many hours (in general) doesn't have a regulatory body that can take away your right to work if you get in trouble.
I'm not sure how likely disbarring is for an innocent mistake.
But I agree with your basic premise. Sure, making partner at a white shoe New York law firm is not a bad gig if you're into it and have been OK with the insane hours to get there. I did some work for one of those firms once and got pretty well paid for it (expert witness work).
But, you could also say that being an English professor can be a pretty good gig--if you're tenured at an Ivy League college. Which doesn't mean it's actually a great career choice given you're more likely to be teaching as an adjunct at a couple different community colleges or in a public high school with your expensive PhD.
Yes, but it's always there as an option if the lawyer doesn't do what they want them to. Also, you can get in this kind of trouble for criminal charges unrelated to work done at your day job. I've known lawyers who got into trouble with the bar over getting a DUI or drug charges.
That kind of risk just doesn't really exist in software engineering beyond regular criminal background checks.
And keep in mind there are a lot of people who enter fields like law because it's the "default" thing to do if you're a good student who doesn't know what they want out of life yet.
Lots of lawyers out there who are at best bored, and at worst filled with revulsion about their day job. That's not a dig on law, but societal expectations.
I started as a lawyer then switched to programming. Law is cushy in the sense that you work in a nice office. But the constant stress, endless "emergency" deadlines, missed anniversaries and celebrations, unreasonable clients, pressure to bill bill bill, then to earn earn earn...
Then there's the work itself. I was in litigation, handling lawsuits between enormous corporations. The first few years of my career were spent in doc review 'dungeons', going through millions of pages of documents to find 'relevant' and 'hot' docs. Then as I became more senior, I was bombarded with one discovery motion after that were often filled with toxic attacks against the other side ("those bastards hid these documents! blah blah blah"). It didn't change much once I began doing 'substantial' work: litigation, by its nature, is intellectual combat. Being immersed in that kind of knife-fighting 24/7, week after week, wore me down.
Now I'm a software engineer and I love it. Work is interesting, hours are humane, and I genuinely enjoy collaborating with my colleagues to build new things.
Sure, I don't make as much as I did in law. But the evenings and weekends I can spend with my family, my mind at rest, are priceless. Plus, software engineers make plenty of money.
Damn, I always felt like a failure for not going into medicine or lawyer and now I feel like I may have chosen the right path. I did well in school but didn't have the 13 years for medicine or the $300,000 for law school... instead I got my little Computer Science bachelors.
If you're early on in your career, I'd recommend the free only Computer Science degree (DIY route -> https://github.com/ossu/computer-science) and eventually getting a Master's if you want to go into management (or alternatively just load up on certs)
I learned to code at 28 and have been doing it professionally for 10 years now. Coding is easier than it used to be. I don't think an age limit applies.
If someone goes to grad school, especially if they had 2-3 years of full-time work mixed in there, they can easily be pushing 30. I basically did a career change at about that age into the computer field as a product manager.
my initial couple jobs were as a software engineer so yes. these days I do a blend of coding and marketing, as a developer advocate at AWS. good luck to your gf, pls feel free to send more qtns I think my email is in my profile.
I switched careers too and I can tell you that the first job is the hardest to get. Build a portfolio and network hard. Take contract jobs. Do whatever it takes to get your foot in the door.
Please elaborate! I just turned 30 and made it a goal to attempt a serious career change. Currently I’m 4 months in clocking 3+/hrs a day of (html,css,js) study. How long did it take before you felt comfortable throwing your hat into the career ring? I have tons of questions, but I would love to hear your story first. Thanks!
I'm studying law now and considering this path. I would be really appreciative to hear your advice on moving from law to computer science. If you could send me an email to the address in my profile, I would be very grateful. Thanks!
Knowing the problems to solve is HUGE. If you know enough programming to identify 10X developers and point them in the right direction, you can create a ton of value.
I'm 38 and just started my first developer job 3 months ago after practicing law for 13 years and hating it. I started learning JavaScript/HTML/CSS about a year ago.
It's the best thing I've ever done for myself and my only regret is not doing it sooner.
I started at 39. I had been looking for a new career to transition from video editing. After the third time my employer restructured my role, I took a voluntary redundancy (basically volunteering to be laid-off) and started programming full-time. I did an online bootcamp and never looked back. Five years later I'm a Senior Software Engineer, and hoping to upgrade to principle engineer by end of the year.
Sometimes I suddenly feel like a fraud, especially when I realize I'm in a meeting where everyone in the room has a CS degree or higher, but overall I feel like I bring a lot of value to what we do and most of all, I really love doing it.
I remember anonymously asking on Quora if people thought I was too old to learn how to program. The amount of support and stories that were shared with me were positively overwhelming. Probably the best answer I received was, "do you enjoy doing this thing?, if so, the answer is you should just do it."
I feel this way sometimes too, despite having a traditional CS degree and being in the software industry my entire professional life. Apparently impostor syndrome is more common than we think.
Personally I've come to believe there are very few people who "fit like a glove", and everyone else has varying degrees of this.
Edit: On rereading this it might appear that I am trying to diminish/dismiss your experiences. I apologize if it came across that way - my intention was more to share that I've heard this same sentiment for different reasons from many different people.
"feeling like a fraud" is pretty common, it is formally called "imposter syndrome".
It is usually just your mind playing tricks on you; there is a delta between your internal picture of what a "real" programmer (or senior manager, or whatever position) looks like and your internal image of yourself.
One solution is to duck type yourself until the feeling goes away. Another is to start to recognize that some of your internal definitions might not be shared by others.
I'll leave it as homework to decide which internal definitions matter the most here.
And yet I find what my employer's prize are the most basic of concepts, having actually nothing to do with programming. Things like, attention to detail, admitting fault (ownership ties into this), regular updates and communication.
I also own code-bases simply because no one else was willing to or interested in doing so. Many times I've been out of my depth, but I've surrounded myself with an incredible team. I've found that in conversations where I was totally out my depth, I was able to contribute simply by asking basic questions or acting as a rubber duck.
Maybe Principle Engineer is a little but of a stretch I'll admit. But I'll still shoot for it and if I don't get it this year, it'll happen next year or the year after that. That's how I made senior after all, and probably why I find myself in roles like interim manager presently.
I got my first tech job later in life, as well. I’m now in a similar position as you, except that I don’t think I’ll be trying for principle/staff level for another couple years yet.
I definitely feel like I’m able to bring significant value, and I’m on a team where almost half of us have masters degrees in CS, while I have just a BA in math and a couple years clocked in grad school (math again).
I tell you what, though: I live for those times when I can make something work easily because I’m able to leverage my math background. It certainly makes understanding recursion fairly easy (many math definitions are recursive), and my graph theory courses help on occasion. I was once even able to help solve a problem that involved calculating the area of a general polygon specified by coordinates, which nobody on the team at the time really knew how to approach.
> I like to think it's an opportunity. If you're able to combine domain expertise from your first career with a solid grasp of CS fundamentals and a good day-to-day working knowledge of your toolchain, that can make you a pretty rare interdisciplinary candidate. Perhaps that then informs how you market yourself and to whom.
Indeed, you're in the best position to solve attorney problems with programming.
But another approach to consider is augmenting or skipping the candidate part and build it yourself. Identity a problem you had, solve it and sell the solution/tool to other attorneys. Even if the selling part doesn't do well enough, you'll learn a lot and have a valuable resume booster.
The article mentions that Logo did not provide a very good experience to the author. I am glad to know that he still found another way back to programming and had a great time with Rust. In my life, Logo opened a whole new world for me.
I began coding with IBM/LCSI PC Logo in my childhood days. The first line of code I ever wrote was:
FD 100
That's the "hello, world" of turtle graphics in Logo. That simple line of code changed my world. I could make stuff happen in an otherwise mostly blank monochrome CRT display. Until then I had seen CRTs in televisions where I had very little control on what I see on the screen. But now, I had control. The turtle became my toy and I could make it draw anything on a 320 x 250 canvas.
The next beautiful piece of code I came across in the same language was:
REPEAT 360 [FD 1 RT 1]
The code above draws an approximation of a circle by combining 360 short line segments. It showed me how control flow can be used elegantly to express complex ideas in a simple expression. And then I came across this:
REPEAT 20 [REPEAT 180 [FD 1 RT 2] RT 18]
The above code draws 20 overlapping circles. The output looks like this: https://susam.in/files/blog/dosbox-logo-1.png. By the way, it is the same image that the author of this article has reused in his article. :-)
At an impressionable age of 9, reading and writing code like this, and using simple arithmetic, geometry, logic, and code to manipulate a two-dimensional world had a lasting effect on me. Back in those days, I used to find joy in sharing some of my interesting Logo programs with my teachers and friends. I like to believe that my passion for software engineering as well as my love for writing code, sharing code, and open source development are a result of coming across these beautiful code examples early in my life.
Please do join it even if you don't remember Logo anymore. The intention here is not to discuss Logo but to share the joy of computing that we discovered through Logo and has remained in our lives. I hope to see you all there. :-)
This story was rather poignant for me, as I am, let's just say quite a bit over 40.
I learned to program when I was in high school and noticed a Teletype 33 ASR in a corner of the math classroom. I knew about Teletypes from being a ham radio operator, but I thought they were just for sending and receiving text over the air or over a phone line to another Teletype. You could either connect to the other Teletype and type in real time, or you could punch a paper tape first and then send it over the air or across the wire at the full speed of 10 characters per second.
This Teletype was special, though. The school had an account with a local timesharing computer company, and for a mere $30 per hour ($200/hour in today's dollars) you could dial in and run a BASIC program.
You can probably guess the next line I added to the program:
20 GOTO 10
Whoops! This wasn't just text scrolling on a screen, it printed out line after line on the roll of Teletype paper. Had to hang up the dialup modem fast.
That summer I got a job as "night operator" at the timesharing company (Transdata in Phoenix, AZ). The great thing about this job was they shut down the timesharing service at night. So I had their SDS Sigma 5 all to myself. My first personal computer!
I found a copy of the Algol-60 Report and taught myself Algol. And then Sigma 5 machine language. It was great fun to see how much of a program I could write on a single punch card (80 bytes).
We had a nice single-card program that you could put in front of a deck of cards to print out the whole card deck. But it was kind of slow, because it would read a card, print the card, read the next card, print that one, etc.
There were a few bytes left on that print program card, so I squeezed in code for a double buffer. It would read the first card, start it printing, and then while it printed read in the next card, overlapping the reads and writes so it printed twice as fast.
That fall I went to Caltech, lasted a year and flunked out. I loved science and math, but when we got to partial differential equations my mind just couldn't handle it. But there was a systems programming class, and the final project was to write an infix expression parser and evaluator with operator precedence in assembly language.
I was the only person in the class to turn in a complete working program with test cases. I could probably tell you exactly where I was sitting when the instructor announced the results. I had found my calling, and have been at it ever since.
My secret weapon: while everyone was punching cards with their program, submitting the batch job, and waiting hours or overnight for the core dump when it crashed, I found an interactive console on campus where I could code and run and test my program in real time. Just like the Teletype I learned on.
Moving forward to the present, I interviewed with a FAANG company last week. It reminded me a bit of the discouraging experience the article's author initially had with LOGO and competitive programming.
Everyone I interviewed with, and the company recruiters, were all super nice and supportive. But the gist of the interview process was to tackle four medium to hard algorithm problems and come up with not only a working solution but a perfectly optimized solution, in 15 minutes each!
The recruiters advised me to spend at least an hour or two every day for two weeks on LeetCode banging through as many algorithm problems as I could, timing myself to see if I could solve each one with optimized code in that 15 minute tim...
Thanks for asking! So far so good. I must admit I'm a bit skeptical but still hopeful about the FAANG interview. The interviews with a few less famous companies have been good. (Actually one is very famous, even more than the FAANGs, but not a "tech" company.)
I will know more this week and will report back. :-)
Out of curiosity I ended up on your LinkedIn page. What a truly impressive resume. You have been exposed to such an incredible variety of companies and technologies over 50+ years. If this FAANG company doesn't sign you up, it's truly their loss.
Wow, I don't know how to thank you enough for that word of encouragement. I am really grateful after a long week of interviews and a much-too-hot weekend here in the Bay Area.
But shhhh... We're not supposed to tell anyone that it's been 50+ years! Right? The advice I usually get is to remove everything from more than 5 years ago, maybe 10 at the very most, otherwise someone might think I'm old! ;-)
Yeah, I don't buy that either, that's why I thought I would have some fun with my LinkedIn and list everything in it.
(Well, I did quietly omit that one job where I got fired after six weeks, many years back. It will be my little secret for now.)
Did you have trouble getting past the HR filter? I recently started on a similar journey and am curious how you managed the non coding portion to get your feet somewhat in the door.
Actually one of their internal recruiters contacted me out of the blue. So I don't have any advice on that aspect.
Alas, after going through their interview process it turned out to be a "no", but no worries, it looks like I have at least one good offer, maybe 2-3 coming in this week.
> Given a non-empty string s, you may delete at most one character. Judge whether you can make it a palindrome.
My thought here is that you start from the outside working inwards. When you encounter a conflict you must decide whether to resolve it by deleting the left or right character. Trying both possibilities should be good enough. From that decision point you just keep comparing and if it fails that branch failed.
Yup, that is pretty much the solution I discussed with the interviewer after writing the code above. We ran out of time to write out the full code, but hopefully coming up with the rough description of a solution like yours was satisfactory.
Waiting with bated breath for the interview feedback... :-)
IMHO you did very well if you were able to write down the correct naive solution and then discuss optimizations afterwards. Hopefully it works out for you! :)
That's a quadratic solution. Try solving an inverse problem to get insight - how to know if a sequence is almost a palindrome and what's the "palindromicity" metric - and you will find the faster solutions. (I think it leads directly to a Knuth-Morris-Pratt like algorithm. And you can further apply a variant of divide and conquer on top.)
It depends how you count. Is string reversion an O(1) or O(N) operation with N the string length? I believe is is O(N) and if you loop over it N times thats O(N^2), isnt it?
I didn't want to post code, but I guess it's the only way I can see to settle the debate. This should be manifestly linear.
def check(s):
is_palindrome = lambda s: s == s[::-1]
if is_palindrome(s):
return True
d = [a==b for a, b in zip(s, s[::-1])].index(False)
return is_palindrome(s[d+1:len(s)-d]) or is_palindrome(s[d:-d-1])
edit: It must be len(s)-d rather than -d, to handle d=0.
I’m not sure it is quadratic, but the “deleting the left or right character” to me, hint it deviates from linear.
I think the solution, logically, is to cut the string in two halves, duplicating the center character for odd-length strings (¿or can you ignore it a bit more?), computing edit distance between the front half and the reversed right half, allowing only deletions, and bailing out as soon as you know the answer is larger than one.
In real life, optimize away the “cut into two halves” and “reverse” parts, as they will be expensive.
The one thing I dislike about such timed tests, they promote quick and dirty hacks rather than thinking and elegant or performant solutions. On a systemic level, that's not good for business and will crowd out people who know better.
Wow. So this article is just some clueless non-programmer doing some language hopping without ever really learning much besides some casual basics.
Just the sentence "but the self keyword was still confusing" is a tell-all. In Python, self is not a keyword.
Don't get me wrong, it's great when non-programmers (who certainly have other valuable skills) play around a bit with toy programming, but real software engineering or even computer science are much more than pondering over curly braces. If you really want to learn this, then that's where you should start. And yes, a CS university degree would get you there, not some half-baked Rust tutorial. That's just an insult to everybody who learned this for real. Comparable to somebody claiming "at age 40 I finally learned medicine!" after watching a few episodes of Dr House and reading the wikipedia page of appendectomy.
I've been a Linux sysadmin for more than 15 years. I've never been into programming except for a few batch scripts. However my last jobs involved a lot of deployment and monitoring custom stuff and combined with this DevOps hype I've been coding a lot of stuff lately. I kinda regret not improving my coding skills earlier.
Now I feel like I need to apologize for TAing a class that taught Logo to college freshmen.
This was a CS class for non-technical natural science freshmen, so it was full of pharmacy, biology, geology students etc.
It's primary purpose was also to (in 14 weeks!) teach the barest detail of all of computing, from basic circuits (~1week) to Logo programming (IIRC < 4weeks) to data science and statistics using R (2weeks) and the concepts behind OOP (1 week, IIRC not on the exam).
Teaching Logo to 18 year olds that had never in their life been interested in programming was an eye-opening experience:
Some students (imo rightfully) only did the exercises to get through the exam, since all they wanted was to pass the class. Fair enough!
Others solved the exercises about for-loops one week, then started asking follow-up questions about infinite loops and accidentally inventing while-loops and their eyes lit up and you could tell that they got it, even though this wasn't even their primary degree direction.
Looking back, as a CS student, I wish I had taken more classes like this, designed to make you question if you were actually taking a degree in the direction of what you were most interested in.
Our CS program was math, math, math and 15% programming. Not really any jumping points from that (except into Mathematics).
Your last point is a good one. I started in math and had to take a few CS courses (which I ended up switching into), but I had almost no exposure to subjects outside those two. At least here in Canada, it feels like electives are de-emphasized and there's little opportunity to explore other subjects. I'm happy with the way things turned out but wish I could have taken a broader course load.
I remember discovering QBasic as a kid and being totally absorbed in it. I couldn't understand what an array was, so that halted my progress.
I rediscovered it as a teenager in highschool and wound up making a basic platform game with a mess of shitty spaghetti code goto statements and drawing lines on the screen. It was great. My dad wanted to encourage me but didn't know how, so he got me a C++ book from the library but it just made no sense and I couldn't get anywhere.
Fast forward to being 23 and deciding what to major in at University. I rediscovered the idea of programming and instantly fell back in love with it. I remember blowing through the entire first semester textbook in 2 weeks and really getting it. It felt like a super power had finally been unlocked. Still does.
I was so glad to reconnect with programming. I always feel I would have been an absolute whizz kid by now if I had really picked it up when I was a teenager and part of me is a little sad about that.
I am, but at 32 I'll be that whiz kid by 40. Heck, I'll take that. I love mastering the craft and getting deeper and deeper into it each year. It's rewarding. Though being a decade ahead would be pretty astounding.
That being said in just 7 short years I've gotten onto doing platform level development and having a great time doing it, so I'm pretty much right where I want to be.
> discovering QBasic as a kid and being totally absorbed in it. I couldn't understand what an array was
i started off programming with qbasic as well -- i remember when i finally figured out what arrays were and how to use them -- now if i wanted to animate many enemies/projectiles i didn't need to keep copying and pasting and defining more and more variables for each new entity! magic! at some point i got hold of a copy of darkbasic (a basic product with simple access to input, 2d graphics and sound) and made some home-brewed space invaders knock off -- all of the entity state was encoded as some horrible huge 2d array -- one index for entity id, the other index for attribute. probably all attributes were stored as integers, with different meanings depending upon the entity type, also stored as an int in one of the columns.
I remember one of my first real programs in uni after figuring out enough programming to make something but not to make it well.
I wrote this calculator for the various math and physics problems I had at the time and it had a nested menu system where when you clicked on a menu item it added that particular calculator/equation to a window pane.
It was an absolute rats nest, but boy was it good.
It's pretty incredible how you can make working software out of both well crafted code and absolute spaghetti.
Yeah, QBasic was my first as well. Actually, it was my second. I started with .BAT files on MS-DOS :-) I spent about half a year until I figured out how to write and run a BAT file and about the same time for how to run a QBasic program, so after that I had a really high pain threshold for learning :-D
> My dad wanted to encourage me but didn't know how, so he got me a C++ book from the library but it just made no sense and I couldn't get anywhere.
Such a nostalgia trigger. My parents were not in IT, but had parent-friends (I was friends with a kid at school, my parents and the kid's parents became friends instead of reluctant chaperones) who were in hindsight mainframe system programmers. Ironically, from hearing about the work, my parents tried to dissuade me when they figured out I was fascinated. It wouldn't pay as well as a Real Engineering Job like mechanical/chemical/electrical yet would demand the same kind of rigor to study so why not just shoot for that REJ or chemistry/biology for med school?
But man, as a kid, once you're hooked molding your own world in code, the amount of sheer mind-numbing work you're willing to go through to get that dopamine hit when some piece works makes a hash of any of that advice. The only block is just the ability to ask around. Elementary school was not the time for K&R or IBM PL/I product manuals or IBM 360 manuals with no adult supervision when I was given access to the mainframe. I. Was. So. Lost. Just the editor was hard to remember rules for.
Back to BASIC on the rickety school teletype (driven by a timeshared mini) I went, and my befuddled parents had no further idea how to channel the energy I put into it without spending money, as well-intentioned as they were, so they got one of the new-fangled IBM PCs at a family budget-busting cost and let me have at it. Forever grateful to them they did that. The seed grew from there. I cannot wait to see what the kids with Google these days that get that same bug bite come up with in the next few decades. It will be glorious.
I am a nudge over 40 and learning to discovers the joys of programming again. I am on the product side, have coded in the past around a decade ago (C++) as part of a rotation scheme at company and learnt BASIC in school.
The thing that got me interested in this again was the excellent 'Automate the Boring Stuff with Python' https://automatetheboringstuff.com/.
This was my best lockdown read so far. I have used it automate some dumb stuff I have to do at work (moving mouse clicking). Get real-time custom alerts on my bank transactions and a develop an app that logs into a site, searches keywords, scrapes results and sends me an email each morning.
I think Turbo Pascal was the perfect language to learn programming. It has a simple core, a static type system without much bells and whistles but that's more solid than the C crazyness, it doesn't force the student to learn 10 different concepts at the same time before writing HelloWorld (unlike Java and other OO languages), but it teaches thinking about types and not only values (unlike scripting languages).
Turbo Pascal was always technically excellent in many ways, and also relatively affordable. (The Microsoft development tools were prohibitively expensive for most non-businesses.)
IIRC, the IDE started with Turbo Pascal version 4.0.
In earlier versions of Turbo Pascal (at least 3.0 and 2.0), there was no IDE. IRC, TP before 4.0 had some kind of simple text screen for switching between the compiler and a text editor.
I started with a copy of Turbo Pascal 2.0 for generic MS-DOS (generic, in that it didn't use IBM PC BIOS features), which a computer shop owner kindly transferred from 8-inch floppy to the 5.25" oddball format that my not-very-PC-compatible used. The cover of manual was monochrome blue, rather than the more familiar multicolored one. http://www.emsps.com/oldtools/borpasv.htm#tp2
I heard that Philipe Kahn named the company "Borland" because it sounded like an American astronaut name, so I suppose that could be the reason for the outer space theme (other than a lot of computer things having sci-fi space themes around then).
After BASIC and LOGO, Turbo Pascal was the first language I became fluent in, during my pre-teens. If I recall correctly, I learned everything from the editor/IDE, help screens, examples, and existing code.
What really accelerated my learning was being given a large codebase (a bulletin-board system) to work on, and seeing how it all fit together to make a running application.
Next was C in my teens, I learned enough to create a little language that controls hardware via serial port, RS232. I remember starting to learn C++ and object-oriented programming.
For some reason, I drifted away from computers after that. Like the author, I found myself in various countries and occupations, always feeling that I had untapped potential and talent, but never able to make the transition.
Fortunately, in my late 30's I rediscovered the joy of programming. The web was the gateway, starting with HTML and CSS. Once I got the hang of it, it was unstoppable - I just kept learning and building more and more every day, because it was so fun. It took a couple years to become a full-time, professional programmer. I picked up server-side languages, released open-source libraries, which led to clients and later co-founding software companies.
A funny thing is, things have come full circle, and now I spend a lot of my time with TypeScript, another creation of Anders Hejlsberg. How the language integrates with the editor (in my case VS Code) to support software development, showing hints, smart autocompletion, navigating type definitions.. It reminds me of Turbo Pascal's IDE in some aspects.
---
The past year or so, I've had a lot of fun with Raspberry Pi. It's a perfect hobby, and I'm now re-learning C so I can control hardware. I remember being ten years old, reading a manual on 8086 assembly language. So happy to be back where I started, with that sweet childhood joy of tinkering with computers.
As a senior in HS it was the very first year our school had programming as a class and it was only for Turbo Pascal so I learned the basics of programming through that. It didn't really stick though (at least consciously) and a few years later I ended up self teaching myself PHP then Ruby then JS through necessity/curiosity.
The very next year they changed it to C++ and I wonder how things would have turned out differently had I been a year younger.
Here I am, 30 years old learning to program for the first time. Specifically, the R and Python languages. I love it, but can't help and think how I would have got on it much earlier in my life if it wasn't for an alcoholic household and the abundance of veiled criticisms I received from my family for trying to use computing as an escape from the toxicity. Never too late!
Hey, another another person who started “later” in life checking in. I’m 36 but started when I was around 29. The common theme here seems to be “grew up around computers but fell into a different career”
My start was working for a company in a developing country who were struggling to find a way to escape spreadsheet hell. I was a business analyst but decided it surely couldn’t be that hard to program and create some kind of system myself! A month or 2 studying “Head First PHP” and I started work on a system to help the company manage their import, export and container yard operations. A few months later I was done. To my knowledge (and absolute horror), they are still using it to this day.
I’m back in Australia 3 years ago, happily working as a senior dev, but reading some of the posts here really brings back memories of the excitement I would get when those “ah ha!” moments would strike during those initial first months.
Started my professional career as a teenager. I was in board rooms advising CEO’s before turning 18. I started in infrastructure. First building gaming computers for clients then shifting to a new model servicing business clients by setting up servers, implementing computer and phone networks, setting up a PBX or VoIP system. Then transitioned from that to designing data centers and call centers for larger clients. Got deep into the architecture of ip transit layers. Fell into resale of existing tech and security for servers/networks/endpoints.
Cloud started eating the market for private data center facilities so I started a VoIP company. We did novel stuff with open platforms to create high density usage without performance impacts on 10 year old hardware (back when hardware was still expensive because cloud couldn’t do telephony well). Had bad a business partner and got out of that.
Throughout all of this I somehow never needed to learn to code more than HTML/CSS.
I decided to learn when I turned 30 and my careers future was unclear.
About three months in, I realized that I needed practice building real world tech not just codeacademy. I hired a tutor to help me learn to program as I only had about 2 hours a week to spend on it.
After three years of being tutored I’ve written a data aggregator sifting through various order data and building custom reports, I’ve used machine learning to filter important content based on content, I’ve built integration with payment gateways and a basic ledger system to track payments, I’ve done all this to work on a startup. I’ve pivoted over time but the concept is still motivating me.
I still consult as a tech leader. I’m a much more capable leader having learned to code with my other skills coupled together.
My recommendation to any professional looking to learn these skills is to hire a tutor. I could spend 100 hours of trial and error that a person with 20 years of experience can figure out in 5 minutes. If you are based in the USA you can find someone for $50/hour or so overseas to help you. That’s $400/month but still less expensive than many paid courses/schools and you get to set the criteria/agenda for your own needs.
>My recommendation to any professional looking to learn these skills is to hire a tutor.
On a similar note, if you're not shy / don't have the funds you can stream yourself learning a language on Twitch and be inundated with people telling you what you should do every time you get stuck. [This guy](https://youtu.be/IwbHcXsCWd0?t=5754) comes to mind. Every time he streams, a virtual army of advisors shows up to tell him what to do (to the point that he frequently has to tell them sorry, I really need to figure this out myself before I look at your solutions).
There's something about games as your motivation for learning to code that is quite unfortunate: Games, especially the popular ones, are monstrously difficult to write.
And I say this as a C++ HFT guy who's written a load of programs for all sorts of other things.
- Games will break your OOP tutorial learnings. If you're starting out with a game, it is gonna get mighty difficult to fit whatever it is into a set of objects. By the time you come around to an ECS, you've probably got a fair bit of experience under your belt.
- A lot of games have a realtime component. So now you need to know about performance, so that you can draw a frame in a few ms. To do that, you need an abstraction of the machine that includes things like cache misses and branch prediction.
- Syntax for c++ is probably the weirdest among common languages, and you need to know it in order to do all the allocations and type safe calls. You'll need a bunch of knowledge about how the thing builds, which also isn't trivial. (Why h files?)
- Games might have 3D graphics. Now you'll need a math course, and a bit of reading about some particular lib.
- Games tend to have multiple abstraction layers. If you need a high performance data structure, you'll have to spend time on writing that while also thinking about the thing you're using it for. You might end up mixing the game logic with your data structure if your thinking is muddled.
- You'll need some artwork. It's not as easy as you might think to come up with some nice colors for your characters. Textures, see 3D graphics.
- Gameplay itself is a huge topic straddling coding, design and culture.
- Want to play with the computer? Game AI is another huge one.
I'm not surprised if 99% of kids who thought they'd learn c++ gave up.
As for my own journey, it tended to be connected to trading. Before I did that, there were moments when I wrote code, including at uni, but they never amounted to a whole that could be used for anything useful. I think having a domain problem helped focus things a lot, in that certain things are prioritized. I still don't know how to do graphics, game AI, and artwork, because trading systems tend not to have those.
Once I got to a comfortable place in terms of skill, I branched out into apps and websites, though I don't consider myself an expert on those. That's also a useful journey, bringing in large areas of experience that I hadn't started with.
I was tinkering around in the Minecraft code and man, I have no idea how people use inheritance when designing complex games without completely losing their minds.
I know composition vs. inheritance is a nuanced debate, and there are people who can tell me exactly how to do inheritance the right way and why they feel it's better -- but after I learned how much cleaner composition feels I went with it and never seriously looked back.
I'm not sure what you mean. Subtyping is primarily used for polymorphism. A pretty common mistake is doing polymorphism at the wrong layer but not using polymorphism at all is also a mistake.
While it's true there's a lot of deep coding that can go into games (especially ones which push the capabilities of the hardware), it's also quite possible with the tools we have to make very successful (and quite good) games with fairly little coding ability. A lot of indie games are a complete trainwreck at the source code level and yet very fun to play. For a good example, see the source code for VVVVVV[0], which is not elegant or high quality C++ code (and it was ported from not particularly elegant ActionScript) but it clearly did the job.
40 year old tech-entrepreneur here. In my 30s, I became the tech lead who I needed as a co-founder. I learned by doing, with periods of great intensity, over many years. There's so much I haven't accomplished yet and so much more to learn. Setting the right goals has been just as challenging as learning how to accomplish them. I take a first-principles approach to understanding fundamentals rather than simply hacking together a solution. This is a very time and energy-consuming approach, but it lends itself to stronger long-term results. Expertise compounds itself over time, block by block. The first year working with any new domain of material is always the hardest, but enduring the process ultimately yields great returns. Endurance is essential to growth. Anyone out there who is reading this and experiencing hardship, do not give up! These hard times will pass, your fears will subside, and a stronger version you will remain. You can achieve your goals!
I'm having a difficult time believing that someone picked up coding and is proficient in doing so at 40 years old unless they had prior experience in something that was similar.
It takes years to become proficient in coding to the point where you don't utilize massive amounts of executive function (which we have a finite amount of in any given day). In addition the act of reading and writing code does a ton of damage to the Wernicke and Brocas area. Over time it can cause damage to the ventral what pathway to the point of complete speech impediment, memory loss and even Alzheimers.
Always be extremely skeptical of anyone learning to code in their 40s, they can do it for short stretches but it is probably not a good idea to pick up coding for the first time in your 40s since the probability of doing damage to your brain is going to be relatively high.
I’m fairly confident thinking alone (without duress or chemical stimulants) doesn’t cause brain damage beyond a temporary headache or insomnia - though if you can find something specific I’d be interested.
> In addition the act of reading and writing code does a ton of damage to the Wernicke and Brocas area. Over time it can cause damage to the ventral what pathway to the point of complete speech impediment, memory loss and even Alzheimers.
Source? I couldn't verify this with some cursory searching, and these seem like extraordinary claims. Your links to Wikipedia don't appear to offer support either.
Every new blog posts of someone finding joy in Rust makes me think there's something wrong with me.
I started with Ruby, then migrated to JavaScript, then was introduced to the joy of static types, first with Flow, then with TypeScript — and now I'm stuck. Dynamically typed languages, including Ruby, Python, or PHP, terrify me; I can't understand people singing praises to Python. OCaml looks ... ugly. Rust looks both ugly and weird. Haskell is luringly beautiful, but at the same time hard and elusive as a unicorn.
No, nothing wrong with you. People are just interested in different things.
I love posts that geek out over low level memory stuff, but I literally avoided learning ANY Javascript framework until this year, to the detriment of many former interviews.
Neither is better. The most important thing you can do is expose yourself to a lot of different influences and then just drill down into what you're interested in, without having to justify it or apologize for it.
It's amazing where following your real interests will lead you, and the world that it will reveal to you. If you instead try to force-feed yourself, you won't learn much, because you won't stick to it.
Yeah so first off - great! It's a super rewarding skill to have and I'm grateful to be a programmer myself.
Turning that skill into your profession is going to be tough. I say this because I've been programming professional for 20 years or so and I'm currently interviewing. The process of getting a coding job has gotten extremely hard and demanding. 5-8 years back it was solely based on the interview; if you knew your stuff and could talk-the-talk, they'd generally take a chance you could walk-the-walk.
Now, it's gotten extremely unreasonable. Mostly in the 'code-challenges' being asked. I recently was given an challenge and after they gave me a small overview of it, I asked roughly what the time-box should be to get a feel for what they thought the effort take. The hiring manager said to me 'it shouldn't take more than 8 hours'. I was shocked. I've been given many coding challenges, they generally fall into the 2 hours or less category. 8 hours is a serious time commitment. I ended up passing because if this is what they find reasonable during the interview I can't imagine what kind of demands they'd place on me day-in-day out.
That's just one recent example. Before that I was asked to write a simple todo list, and given a time box of 2 days. In that case I chose to do it because I knew I could do something like that in way less than 2 days. I ended up using the full 2 days just sprucing up the UX. I ended up not getting an offer from that company because I bombed the 2 hour group interview which I knew would happen; our family pet had been suddenly ill and in the ICU for 4 days straight and my wife and I had maybe 8 hours of sleep over the previous 5 days. Of course I tried to reschedule but the technical recruiter was adamant this last interview was just a formality, they loved my star-wars themed todo list (Jedi-Do, it's on my github: https://github.com/LowRezSkyline/Jedi_Do) and an offer was pending.
So it's one thing to learn programming and quite another to get through the crazy gate-keeping happening these days and land an actual job. Maybe it's easier for entry level programming positions, I have no idea.
It's still reasonable in the enterprise world. There is a life outside of Silicon Valley.
I like a lot of other enterprise devs know if I studied for a few weeks for the interviews I could get a foothold into that universe, but it's just... meh. Not worth it. I like my life.
I started programming when I was a wee lad, and never stopped. Speaking as one of those insufferable "whiz kids" of the 80s, I say this: any path to discovering the wonders and joys of this technology is equally good. If you aren't a programmer, no matter what your age or background, now is a great time to start.
168 comments
[ 4.2 ms ] story [ 208 ms ] threadeg. I started with Basic -> QW Basic -> Pascal -> PHP -> Perl -> ruby -> golang and a lot of others languages too.
Writing code is not the hard part.
follow something like this: https://functionalcs.github.io/curriculum/
Or if you want to be something specifc follow this and find resources to learn about the topics: https://github.com/kamranahmedse/developer-roadmap
Maybe it suits some people but for most people it’s sad and frustrating to work with old messy systems in obsolete languages when there’s a shiny new one that’s objectively much better in almost every way.
In which languages do you think Core Audio and Metal are written on?
Did you mean GW-BASIC? Or maybe QBasic? Or perhaps QuickBasic? By the way, I have archived these obsolete pieces of software from MS-DOS era at https://github.com/susam/dosage (search for Basic in the README) if anyone wants to try their hands on them again.
This also seems the author's problem. It reads like he feels he should ought to learn programming but he doesn't actually have any particular problems he wants solved.
IMO, adventofcode.com/ is much more well-rounded.
I contributed this image to Wikipedia at https://en.wikipedia.org/wiki/File:IBM_LCSI_Logo_Circles.png, so that it could be added to the Wikipedia article on Logo at https://en.wikipedia.org/wiki/Logo_(programming_language).
It is fun to see this image being reused in this article!
Related: https://news.ycombinator.com/item?id=24405420
The linked article is about learning for pleasure, but there are also challenges associated with trying to enter the field as a second career. The technical complexity, of course, and the scale of what needs to be learned, can sometimes be overwhelming. It helps to bring as much humility to the process as you can muster. But peoples' perceptions can also be a challenge - no one quite knows what to make of you!
I like to think it's an opportunity. If you're able to combine domain expertise from your first career with a solid grasp of CS fundamentals and a good day-to-day working knowledge of your toolchain, that can make you a pretty rare interdisciplinary candidate. Perhaps that then informs how you market yourself and to whom.
Best of luck to anyone coming at this as a second career!
Just knowing you exist gives me hope I may still be able to break into tech, at some level. And given that Hurricane Laura just decimated my city ( and my home and my office) I need some hope right now.
In-house counsel jobs can be a bit more relaxing, as you might be working on longer term projects rather than the latest disaster that fell into your lap.
<filterbubble> one source which supports my worldview: https://www.thecareercookbook.com/hello-world-6/ </filterbubble>
It is, but you have to be quite the expert. It's not like app development where even limited experience can be enough to get by. However if you like that sort of stuff you can try to become a web develoepr (pick say Python or Ruby) and then become an expert in backendy / performence issues.
This actually took me down a long rabbit hole of how local government software is horrible and someone could crush this area — my only concern would be lack of traction as local governments seem to prefer operating in obscurity/making it difficult to hold them accountable.
OTOH, he's basically a one-man show, and has implied that if he had to scale -- e.g. add 3+ people -- then the $$$ wouldn't go as far. By himself it's a decent paycheck, though.
The problem is municipalities are all different, with different state/local requirements, and they often don't have the money or operational depth to support deeply customized software. I grew up near a park that had to shutdown for several months because they couldn't get enough funds together to have people mow the lawns; where would they find the money for custom code?
Take on contracts to do something that is traditionally done with hand -> write scripts to automate it -> take on more contracts.
At that point you would probably be paid for 20 people's worth for 20 people's work....but automating it will allow you to pocket all of it due to zero (low) costs.
Our startup tried doing this with automated 3D map creation for drone use surveying. It is incredibly easy to undercut traditional competition at a technical level. Convincing corporate to trust in your experiment tho, kinda hard. It is the classic: 'No one has been fired for hiring IBM' conundrum.
As a software developer I bring home more than some attorneys I have met. I am not working a FAANG making buckets of cash either.
- the lawyer doesn't receive the full 250, half of it(?) goes to business/partnership
- afaik many lawyers under-bill their hours, i'm not sure why (beyond "competition") but it's a common practice
- the job itself may not be enjoyable at some point and you may desire more creative pursuits
- Many Lawyers under bill for fear of losing/surrendering their license [1] or squeeze in their Model Rule 6.1 hours [2]
- I'm seeing more lawyers amass some wealth, get burnt out, and then jump over to more creative or altruistic endeavours with less stress; can't blame them.
[1] https://www.thelawforlawyerstoday.com/2019/12/4739/
[2] https://www.americanbar.org/groups/legal_education/resources...
Either you're an entrepreneur, and your hourly wage has to pay for all kinds of costs, including time not spent working, getting clients, equipment, training blablabla. Or you're an employee and your take-home pay can be completely detached from the pricing to your clients.
When I started my career in a legal/financial firm as a junior my hourly rate was $200 and my hourly pay was about $15, for example.
In those days I also worked a lot of overtime and chargeability requirements will drive you mad. Also in many firms you quickly specialise leading to sometimes boring work. On the one hand every legal matter is different and has its own quirks, challenges and interesting unique aspects. On the other hand, when you specialise in a certain field, you also constantly work on similar cases with similar references and jurisprudence, and you indeed often end up filling in templates for standard letters, contracts, motions etc, because the bulk of the substance will be the same over and over. Point being, the $15 an hour also came with mind-numbing work with unhealthy workhours and poor work/life balance.
That's just one of many stories, of course and all jobs have their issues. Some lawyers have a great job/life. But there's also plenty of people who may enjoy programming much more.
During the time they're making that much money they're basically trapped working insane hours at one firm. Most lawyers don't even make six figures. Also, they can get disbarred if they make a mistake.
Software engineering allows for higher earnings for your entire career (though the ceiling might be lower on earnings), is less stressful and doesn't demand as many hours (in general) doesn't have a regulatory body that can take away your right to work if you get in trouble.
But I agree with your basic premise. Sure, making partner at a white shoe New York law firm is not a bad gig if you're into it and have been OK with the insane hours to get there. I did some work for one of those firms once and got pretty well paid for it (expert witness work).
But, you could also say that being an English professor can be a pretty good gig--if you're tenured at an Ivy League college. Which doesn't mean it's actually a great career choice given you're more likely to be teaching as an adjunct at a couple different community colleges or in a public high school with your expensive PhD.
[1] "Disbarment is quite rare: in 2011, only 1,046 lawyers were disbarred." https://en.wikipedia.org/wiki/Disbarment [2] https://www.rocketlawyer.com/blog/getting-disbarred-is-harde...
That kind of risk just doesn't really exist in software engineering beyond regular criminal background checks.
And keep in mind there are a lot of people who enter fields like law because it's the "default" thing to do if you're a good student who doesn't know what they want out of life yet.
Lots of lawyers out there who are at best bored, and at worst filled with revulsion about their day job. That's not a dig on law, but societal expectations.
Then there's the work itself. I was in litigation, handling lawsuits between enormous corporations. The first few years of my career were spent in doc review 'dungeons', going through millions of pages of documents to find 'relevant' and 'hot' docs. Then as I became more senior, I was bombarded with one discovery motion after that were often filled with toxic attacks against the other side ("those bastards hid these documents! blah blah blah"). It didn't change much once I began doing 'substantial' work: litigation, by its nature, is intellectual combat. Being immersed in that kind of knife-fighting 24/7, week after week, wore me down.
Now I'm a software engineer and I love it. Work is interesting, hours are humane, and I genuinely enjoy collaborating with my colleagues to build new things.
Sure, I don't make as much as I did in law. But the evenings and weekends I can spend with my family, my mind at rest, are priceless. Plus, software engineers make plenty of money.
If you're early on in your career, I'd recommend the free only Computer Science degree (DIY route -> https://github.com/ossu/computer-science) and eventually getting a Master's if you want to go into management (or alternatively just load up on certs)
good luck, friend
I'm 38 and just started my first developer job 3 months ago after practicing law for 13 years and hating it. I started learning JavaScript/HTML/CSS about a year ago.
It's the best thing I've ever done for myself and my only regret is not doing it sooner.
You can do it!
Sometimes I suddenly feel like a fraud, especially when I realize I'm in a meeting where everyone in the room has a CS degree or higher, but overall I feel like I bring a lot of value to what we do and most of all, I really love doing it.
I remember anonymously asking on Quora if people thought I was too old to learn how to program. The amount of support and stories that were shared with me were positively overwhelming. Probably the best answer I received was, "do you enjoy doing this thing?, if so, the answer is you should just do it."
I feel this way sometimes too, despite having a traditional CS degree and being in the software industry my entire professional life. Apparently impostor syndrome is more common than we think.
Personally I've come to believe there are very few people who "fit like a glove", and everyone else has varying degrees of this.
Edit: On rereading this it might appear that I am trying to diminish/dismiss your experiences. I apologize if it came across that way - my intention was more to share that I've heard this same sentiment for different reasons from many different people.
It is usually just your mind playing tricks on you; there is a delta between your internal picture of what a "real" programmer (or senior manager, or whatever position) looks like and your internal image of yourself.
One solution is to duck type yourself until the feeling goes away. Another is to start to recognize that some of your internal definitions might not be shared by others.
I'll leave it as homework to decide which internal definitions matter the most here.
While having a CS degree does not hurt it is probably on a bottom of things one needs to be a good programmer.
> Five years later I'm a Senior Software Engineer
> hoping to upgrade to principle
> Sometimes I suddenly feel like a fraud
You're not alone. Without a broad and rigorous education, it's hard to imagine being anything other than an advanced journeyman after only five years.
I also own code-bases simply because no one else was willing to or interested in doing so. Many times I've been out of my depth, but I've surrounded myself with an incredible team. I've found that in conversations where I was totally out my depth, I was able to contribute simply by asking basic questions or acting as a rubber duck.
Maybe Principle Engineer is a little but of a stretch I'll admit. But I'll still shoot for it and if I don't get it this year, it'll happen next year or the year after that. That's how I made senior after all, and probably why I find myself in roles like interim manager presently.
I definitely feel like I’m able to bring significant value, and I’m on a team where almost half of us have masters degrees in CS, while I have just a BA in math and a couple years clocked in grad school (math again).
I tell you what, though: I live for those times when I can make something work easily because I’m able to leverage my math background. It certainly makes understanding recursion fairly easy (many math definitions are recursive), and my graph theory courses help on occasion. I was once even able to help solve a problem that involved calculating the area of a general polygon specified by coordinates, which nobody on the team at the time really knew how to approach.
Indeed, you're in the best position to solve attorney problems with programming.
But another approach to consider is augmenting or skipping the candidate part and build it yourself. Identity a problem you had, solve it and sell the solution/tool to other attorneys. Even if the selling part doesn't do well enough, you'll learn a lot and have a valuable resume booster.
I began coding with IBM/LCSI PC Logo in my childhood days. The first line of code I ever wrote was:
That's the "hello, world" of turtle graphics in Logo. That simple line of code changed my world. I could make stuff happen in an otherwise mostly blank monochrome CRT display. Until then I had seen CRTs in televisions where I had very little control on what I see on the screen. But now, I had control. The turtle became my toy and I could make it draw anything on a 320 x 250 canvas.The next beautiful piece of code I came across in the same language was:
The code above draws an approximation of a circle by combining 360 short line segments. It showed me how control flow can be used elegantly to express complex ideas in a simple expression. And then I came across this: The above code draws 20 overlapping circles. The output looks like this: https://susam.in/files/blog/dosbox-logo-1.png. By the way, it is the same image that the author of this article has reused in his article. :-)At an impressionable age of 9, reading and writing code like this, and using simple arithmetic, geometry, logic, and code to manipulate a two-dimensional world had a lasting effect on me. Back in those days, I used to find joy in sharing some of my interesting Logo programs with my teachers and friends. I like to believe that my passion for software engineering as well as my love for writing code, sharing code, and open source development are a result of coming across these beautiful code examples early in my life.
Please do join it even if you don't remember Logo anymore. The intention here is not to discuss Logo but to share the joy of computing that we discovered through Logo and has remained in our lives. I hope to see you all there. :-)
Turns out everything else that I've done with computers in the meantime helped and is a force multiplier in my job.
I learned to program when I was in high school and noticed a Teletype 33 ASR in a corner of the math classroom. I knew about Teletypes from being a ham radio operator, but I thought they were just for sending and receiving text over the air or over a phone line to another Teletype. You could either connect to the other Teletype and type in real time, or you could punch a paper tape first and then send it over the air or across the wire at the full speed of 10 characters per second.
https://en.wikipedia.org/wiki/Teletype_Model_33
This Teletype was special, though. The school had an account with a local timesharing computer company, and for a mere $30 per hour ($200/hour in today's dollars) you could dial in and run a BASIC program.
https://en.wikipedia.org/wiki/Time-sharing
Naturally my first program was:
and it printed HELLO!You can probably guess the next line I added to the program:
Whoops! This wasn't just text scrolling on a screen, it printed out line after line on the roll of Teletype paper. Had to hang up the dialup modem fast.That summer I got a job as "night operator" at the timesharing company (Transdata in Phoenix, AZ). The great thing about this job was they shut down the timesharing service at night. So I had their SDS Sigma 5 all to myself. My first personal computer!
I found a copy of the Algol-60 Report and taught myself Algol. And then Sigma 5 machine language. It was great fun to see how much of a program I could write on a single punch card (80 bytes).
We had a nice single-card program that you could put in front of a deck of cards to print out the whole card deck. But it was kind of slow, because it would read a card, print the card, read the next card, print that one, etc.
There were a few bytes left on that print program card, so I squeezed in code for a double buffer. It would read the first card, start it printing, and then while it printed read in the next card, overlapping the reads and writes so it printed twice as fast.
That fall I went to Caltech, lasted a year and flunked out. I loved science and math, but when we got to partial differential equations my mind just couldn't handle it. But there was a systems programming class, and the final project was to write an infix expression parser and evaluator with operator precedence in assembly language.
I was the only person in the class to turn in a complete working program with test cases. I could probably tell you exactly where I was sitting when the instructor announced the results. I had found my calling, and have been at it ever since.
My secret weapon: while everyone was punching cards with their program, submitting the batch job, and waiting hours or overnight for the core dump when it crashed, I found an interactive console on campus where I could code and run and test my program in real time. Just like the Teletype I learned on.
Moving forward to the present, I interviewed with a FAANG company last week. It reminded me a bit of the discouraging experience the article's author initially had with LOGO and competitive programming.
Everyone I interviewed with, and the company recruiters, were all super nice and supportive. But the gist of the interview process was to tackle four medium to hard algorithm problems and come up with not only a working solution but a perfectly optimized solution, in 15 minutes each!
The recruiters advised me to spend at least an hour or two every day for two weeks on LeetCode banging through as many algorithm problems as I could, timing myself to see if I could solve each one with optimized code in that 15 minute tim...
I will know more this week and will report back. :-)
But shhhh... We're not supposed to tell anyone that it's been 50+ years! Right? The advice I usually get is to remove everything from more than 5 years ago, maybe 10 at the very most, otherwise someone might think I'm old! ;-)
Yeah, I don't buy that either, that's why I thought I would have some fun with my LinkedIn and list everything in it.
(Well, I did quietly omit that one job where I got fired after six weeks, many years back. It will be my little secret for now.)
But seriously, thank you again! :-)
Alas, after going through their interview process it turned out to be a "no", but no worries, it looks like I have at least one good offer, maybe 2-3 coming in this week.
My thought here is that you start from the outside working inwards. When you encounter a conflict you must decide whether to resolve it by deleting the left or right character. Trying both possibilities should be good enough. From that decision point you just keep comparing and if it fails that branch failed.
Waiting with bated breath for the interview feedback... :-)
Godspeed!
I think the solution, logically, is to cut the string in two halves, duplicating the center character for odd-length strings (¿or can you ignore it a bit more?), computing edit distance between the front half and the reversed right half, allowing only deletions, and bailing out as soon as you know the answer is larger than one.
In real life, optimize away the “cut into two halves” and “reverse” parts, as they will be expensive.
Just the sentence "but the self keyword was still confusing" is a tell-all. In Python, self is not a keyword.
Don't get me wrong, it's great when non-programmers (who certainly have other valuable skills) play around a bit with toy programming, but real software engineering or even computer science are much more than pondering over curly braces. If you really want to learn this, then that's where you should start. And yes, a CS university degree would get you there, not some half-baked Rust tutorial. That's just an insult to everybody who learned this for real. Comparable to somebody claiming "at age 40 I finally learned medicine!" after watching a few episodes of Dr House and reading the wikipedia page of appendectomy.
This was a CS class for non-technical natural science freshmen, so it was full of pharmacy, biology, geology students etc.
It's primary purpose was also to (in 14 weeks!) teach the barest detail of all of computing, from basic circuits (~1week) to Logo programming (IIRC < 4weeks) to data science and statistics using R (2weeks) and the concepts behind OOP (1 week, IIRC not on the exam).
Teaching Logo to 18 year olds that had never in their life been interested in programming was an eye-opening experience:
Some students (imo rightfully) only did the exercises to get through the exam, since all they wanted was to pass the class. Fair enough!
Others solved the exercises about for-loops one week, then started asking follow-up questions about infinite loops and accidentally inventing while-loops and their eyes lit up and you could tell that they got it, even though this wasn't even their primary degree direction.
Looking back, as a CS student, I wish I had taken more classes like this, designed to make you question if you were actually taking a degree in the direction of what you were most interested in.
Our CS program was math, math, math and 15% programming. Not really any jumping points from that (except into Mathematics).
I rediscovered it as a teenager in highschool and wound up making a basic platform game with a mess of shitty spaghetti code goto statements and drawing lines on the screen. It was great. My dad wanted to encourage me but didn't know how, so he got me a C++ book from the library but it just made no sense and I couldn't get anywhere.
Fast forward to being 23 and deciding what to major in at University. I rediscovered the idea of programming and instantly fell back in love with it. I remember blowing through the entire first semester textbook in 2 weeks and really getting it. It felt like a super power had finally been unlocked. Still does.
I was so glad to reconnect with programming. I always feel I would have been an absolute whizz kid by now if I had really picked it up when I was a teenager and part of me is a little sad about that.
That being said in just 7 short years I've gotten onto doing platform level development and having a great time doing it, so I'm pretty much right where I want to be.
i started off programming with qbasic as well -- i remember when i finally figured out what arrays were and how to use them -- now if i wanted to animate many enemies/projectiles i didn't need to keep copying and pasting and defining more and more variables for each new entity! magic! at some point i got hold of a copy of darkbasic (a basic product with simple access to input, 2d graphics and sound) and made some home-brewed space invaders knock off -- all of the entity state was encoded as some horrible huge 2d array -- one index for entity id, the other index for attribute. probably all attributes were stored as integers, with different meanings depending upon the entity type, also stored as an int in one of the columns.
I remember one of my first real programs in uni after figuring out enough programming to make something but not to make it well.
I wrote this calculator for the various math and physics problems I had at the time and it had a nested menu system where when you clicked on a menu item it added that particular calculator/equation to a window pane.
It was an absolute rats nest, but boy was it good.
It's pretty incredible how you can make working software out of both well crafted code and absolute spaghetti.
yup. c.f. James Hague's "Write Code Like You Just Learned How to Program" https://prog21.dadgum.com/87.html
Such a nostalgia trigger. My parents were not in IT, but had parent-friends (I was friends with a kid at school, my parents and the kid's parents became friends instead of reluctant chaperones) who were in hindsight mainframe system programmers. Ironically, from hearing about the work, my parents tried to dissuade me when they figured out I was fascinated. It wouldn't pay as well as a Real Engineering Job like mechanical/chemical/electrical yet would demand the same kind of rigor to study so why not just shoot for that REJ or chemistry/biology for med school?
But man, as a kid, once you're hooked molding your own world in code, the amount of sheer mind-numbing work you're willing to go through to get that dopamine hit when some piece works makes a hash of any of that advice. The only block is just the ability to ask around. Elementary school was not the time for K&R or IBM PL/I product manuals or IBM 360 manuals with no adult supervision when I was given access to the mainframe. I. Was. So. Lost. Just the editor was hard to remember rules for.
Back to BASIC on the rickety school teletype (driven by a timeshared mini) I went, and my befuddled parents had no further idea how to channel the energy I put into it without spending money, as well-intentioned as they were, so they got one of the new-fangled IBM PCs at a family budget-busting cost and let me have at it. Forever grateful to them they did that. The seed grew from there. I cannot wait to see what the kids with Google these days that get that same bug bite come up with in the next few decades. It will be glorious.
The thing that got me interested in this again was the excellent 'Automate the Boring Stuff with Python' https://automatetheboringstuff.com/.
This was my best lockdown read so far. I have used it automate some dumb stuff I have to do at work (moving mouse clicking). Get real-time custom alerts on my bank transactions and a develop an app that logs into a site, searches keywords, scrapes results and sends me an email each morning.
Can't recommend the book highly enough.
Sadly it's basically dead now.
IIRC, the IDE started with Turbo Pascal version 4.0.
In earlier versions of Turbo Pascal (at least 3.0 and 2.0), there was no IDE. IRC, TP before 4.0 had some kind of simple text screen for switching between the compiler and a text editor.
I started with a copy of Turbo Pascal 2.0 for generic MS-DOS (generic, in that it didn't use IBM PC BIOS features), which a computer shop owner kindly transferred from 8-inch floppy to the 5.25" oddball format that my not-very-PC-compatible used. The cover of manual was monochrome blue, rather than the more familiar multicolored one. http://www.emsps.com/oldtools/borpasv.htm#tp2
I heard that Philipe Kahn named the company "Borland" because it sounded like an American astronaut name, so I suppose that could be the reason for the outer space theme (other than a lot of computer things having sci-fi space themes around then).
What really accelerated my learning was being given a large codebase (a bulletin-board system) to work on, and seeing how it all fit together to make a running application.
Next was C in my teens, I learned enough to create a little language that controls hardware via serial port, RS232. I remember starting to learn C++ and object-oriented programming.
For some reason, I drifted away from computers after that. Like the author, I found myself in various countries and occupations, always feeling that I had untapped potential and talent, but never able to make the transition.
Fortunately, in my late 30's I rediscovered the joy of programming. The web was the gateway, starting with HTML and CSS. Once I got the hang of it, it was unstoppable - I just kept learning and building more and more every day, because it was so fun. It took a couple years to become a full-time, professional programmer. I picked up server-side languages, released open-source libraries, which led to clients and later co-founding software companies.
A funny thing is, things have come full circle, and now I spend a lot of my time with TypeScript, another creation of Anders Hejlsberg. How the language integrates with the editor (in my case VS Code) to support software development, showing hints, smart autocompletion, navigating type definitions.. It reminds me of Turbo Pascal's IDE in some aspects.
---
The past year or so, I've had a lot of fun with Raspberry Pi. It's a perfect hobby, and I'm now re-learning C so I can control hardware. I remember being ten years old, reading a manual on 8086 assembly language. So happy to be back where I started, with that sweet childhood joy of tinkering with computers.
The very next year they changed it to C++ and I wonder how things would have turned out differently had I been a year younger.
My start was working for a company in a developing country who were struggling to find a way to escape spreadsheet hell. I was a business analyst but decided it surely couldn’t be that hard to program and create some kind of system myself! A month or 2 studying “Head First PHP” and I started work on a system to help the company manage their import, export and container yard operations. A few months later I was done. To my knowledge (and absolute horror), they are still using it to this day.
I’m back in Australia 3 years ago, happily working as a senior dev, but reading some of the posts here really brings back memories of the excitement I would get when those “ah ha!” moments would strike during those initial first months.
Cloud started eating the market for private data center facilities so I started a VoIP company. We did novel stuff with open platforms to create high density usage without performance impacts on 10 year old hardware (back when hardware was still expensive because cloud couldn’t do telephony well). Had bad a business partner and got out of that.
Throughout all of this I somehow never needed to learn to code more than HTML/CSS.
I decided to learn when I turned 30 and my careers future was unclear.
About three months in, I realized that I needed practice building real world tech not just codeacademy. I hired a tutor to help me learn to program as I only had about 2 hours a week to spend on it.
After three years of being tutored I’ve written a data aggregator sifting through various order data and building custom reports, I’ve used machine learning to filter important content based on content, I’ve built integration with payment gateways and a basic ledger system to track payments, I’ve done all this to work on a startup. I’ve pivoted over time but the concept is still motivating me.
I still consult as a tech leader. I’m a much more capable leader having learned to code with my other skills coupled together.
My recommendation to any professional looking to learn these skills is to hire a tutor. I could spend 100 hours of trial and error that a person with 20 years of experience can figure out in 5 minutes. If you are based in the USA you can find someone for $50/hour or so overseas to help you. That’s $400/month but still less expensive than many paid courses/schools and you get to set the criteria/agenda for your own needs.
On a similar note, if you're not shy / don't have the funds you can stream yourself learning a language on Twitch and be inundated with people telling you what you should do every time you get stuck. [This guy](https://youtu.be/IwbHcXsCWd0?t=5754) comes to mind. Every time he streams, a virtual army of advisors shows up to tell him what to do (to the point that he frequently has to tell them sorry, I really need to figure this out myself before I look at your solutions).
And I say this as a C++ HFT guy who's written a load of programs for all sorts of other things.
- Games will break your OOP tutorial learnings. If you're starting out with a game, it is gonna get mighty difficult to fit whatever it is into a set of objects. By the time you come around to an ECS, you've probably got a fair bit of experience under your belt.
- A lot of games have a realtime component. So now you need to know about performance, so that you can draw a frame in a few ms. To do that, you need an abstraction of the machine that includes things like cache misses and branch prediction.
- Syntax for c++ is probably the weirdest among common languages, and you need to know it in order to do all the allocations and type safe calls. You'll need a bunch of knowledge about how the thing builds, which also isn't trivial. (Why h files?)
- Games might have 3D graphics. Now you'll need a math course, and a bit of reading about some particular lib.
- Games tend to have multiple abstraction layers. If you need a high performance data structure, you'll have to spend time on writing that while also thinking about the thing you're using it for. You might end up mixing the game logic with your data structure if your thinking is muddled.
- You'll need some artwork. It's not as easy as you might think to come up with some nice colors for your characters. Textures, see 3D graphics.
- Gameplay itself is a huge topic straddling coding, design and culture.
- Want to play with the computer? Game AI is another huge one.
I'm not surprised if 99% of kids who thought they'd learn c++ gave up.
As for my own journey, it tended to be connected to trading. Before I did that, there were moments when I wrote code, including at uni, but they never amounted to a whole that could be used for anything useful. I think having a domain problem helped focus things a lot, in that certain things are prioritized. I still don't know how to do graphics, game AI, and artwork, because trading systems tend not to have those.
Once I got to a comfortable place in terms of skill, I branched out into apps and websites, though I don't consider myself an expert on those. That's also a useful journey, bringing in large areas of experience that I hadn't started with.
I know composition vs. inheritance is a nuanced debate, and there are people who can tell me exactly how to do inheritance the right way and why they feel it's better -- but after I learned how much cleaner composition feels I went with it and never seriously looked back.
[0] https://github.com/TerryCavanagh/VVVVVV
Always be extremely skeptical of anyone learning to code in their 40s, they can do it for short stretches but it is probably not a good idea to pick up coding for the first time in your 40s since the probability of doing damage to your brain is going to be relatively high.
https://en.wikipedia.org/wiki/Broca%27s_area
https://en.wikipedia.org/wiki/Wernicke%27s_area
This sounds like complete guff to me. Citation sorely needed.
Your source doesn't support your assertion. It lists the more common causes as:
* Stroke or brain anoxia.
* Brain tumor
* Brain trauma
And is shows less common causes as:
* Autoimmune disease
* Paraneoplastic syndrome
* Micrometastasis
* neurodegenerative disorders
* Certain infections (e.g., Bartonella henselae[19])
* Metabolic disease (e.g., hyperosmolar hyperglycemic state[20])
I'm actually curious because it's an interesting proposition, even if I'm very skeptical.
I've been doing it professionally for 9 years now and I turn 50 next spring. No brain damage noted yet.
I'm assuming you haven't dabbled in the modern JS ecosystem then.
Source? I couldn't verify this with some cursory searching, and these seem like extraordinary claims. Your links to Wikipedia don't appear to offer support either.
Jesus that sounds serious. Should I start demanding hazard pay from my employer?
Every new blog posts of someone finding joy in Rust makes me think there's something wrong with me.
I started with Ruby, then migrated to JavaScript, then was introduced to the joy of static types, first with Flow, then with TypeScript — and now I'm stuck. Dynamically typed languages, including Ruby, Python, or PHP, terrify me; I can't understand people singing praises to Python. OCaml looks ... ugly. Rust looks both ugly and weird. Haskell is luringly beautiful, but at the same time hard and elusive as a unicorn.
While Typescript is so nice and warm and cozy...
I love posts that geek out over low level memory stuff, but I literally avoided learning ANY Javascript framework until this year, to the detriment of many former interviews.
Neither is better. The most important thing you can do is expose yourself to a lot of different influences and then just drill down into what you're interested in, without having to justify it or apologize for it.
It's amazing where following your real interests will lead you, and the world that it will reveal to you. If you instead try to force-feed yourself, you won't learn much, because you won't stick to it.
Turning that skill into your profession is going to be tough. I say this because I've been programming professional for 20 years or so and I'm currently interviewing. The process of getting a coding job has gotten extremely hard and demanding. 5-8 years back it was solely based on the interview; if you knew your stuff and could talk-the-talk, they'd generally take a chance you could walk-the-walk.
Now, it's gotten extremely unreasonable. Mostly in the 'code-challenges' being asked. I recently was given an challenge and after they gave me a small overview of it, I asked roughly what the time-box should be to get a feel for what they thought the effort take. The hiring manager said to me 'it shouldn't take more than 8 hours'. I was shocked. I've been given many coding challenges, they generally fall into the 2 hours or less category. 8 hours is a serious time commitment. I ended up passing because if this is what they find reasonable during the interview I can't imagine what kind of demands they'd place on me day-in-day out.
That's just one recent example. Before that I was asked to write a simple todo list, and given a time box of 2 days. In that case I chose to do it because I knew I could do something like that in way less than 2 days. I ended up using the full 2 days just sprucing up the UX. I ended up not getting an offer from that company because I bombed the 2 hour group interview which I knew would happen; our family pet had been suddenly ill and in the ICU for 4 days straight and my wife and I had maybe 8 hours of sleep over the previous 5 days. Of course I tried to reschedule but the technical recruiter was adamant this last interview was just a formality, they loved my star-wars themed todo list (Jedi-Do, it's on my github: https://github.com/LowRezSkyline/Jedi_Do) and an offer was pending.
So it's one thing to learn programming and quite another to get through the crazy gate-keeping happening these days and land an actual job. Maybe it's easier for entry level programming positions, I have no idea.
Best of luck either way!
I like a lot of other enterprise devs know if I studied for a few weeks for the interviews I could get a foothold into that universe, but it's just... meh. Not worth it. I like my life.
It's also possible because of covid employers are being more careful/suspicious in their hiring process?
Having interviewed and hired countless programmers in past jobs I don't see the value in these kinds of exercises.