Hacker News new | past | comments | ask | show | jobs | submit login
Ask HN: Self-taught webdev with lots of free time. What should I learn?
212 points by thatcodingdude on Aug 12, 2020 | hide | past | favorite | 317 comments
Hey HN,

I'm a self-taught webdev with 10 years xp. I have lots of free time right now with a bit less freelance projects coming in, and I'm getting a bit bored of building web CRUDs and feel like I'm not learning much anymore.

I'm thinking it'd be better to specialize more, but I'm unsure which direction to go. I'm actually selling myself as a full-stack web developer, knowing JS/react/vueJS, PHP/Laravel, bit of design, server management etc.

If possible I'd like a job that can be fully remote or at most 1 day on site, which probably excludes security and high level stuff.

I have lots of time to learn so I'm open to any advice even if it's just to git gud and read SICP.

tl;dr webdev having done every type of CRUD under the sun - what do now

Thanks for your input !




Web performance

This is an underappreciated field that lends to plenty of consulting. As the web becomes more complex, with heavy frontend code, third party services, and demanding amounts of images and videos, it's requiring a deeper understanding about networking and browsers to keep the web performant. Compounding the problem is the growing number of users who use mobile devices to browse the web, which have larger constraints on network and hardware than desktop users.

Additionally, web performance speaks to businesses because a "slow" website can impact your bottom line. There's lots of case studies about this: https://wpostats.com. For large companies with heavily-trafficked websites, this is critical as you're losing potential users/customers as a %.

Google has slowly been making it a bigger objective for websites to focus on SEO-wise, especially with their latest push around "web vitals." Therefore it's becoming a higher priority for marketing departments as well.

Web performance is not sexy and requires a lot of patience around analyzing websites to figure out why they're slow and coming up with specific optimizations for them. This is not like building websites. It's more like debugging. And it requires a pretty deep understanding of how websites load and run in browsers. Provided these things, I think that's partially why it's given so little attention and why so many websites perform terribly. If you're not deterred by these factors, there's a lot of businesses that could use this specialized expertise.


I'm working as a webperf guy as a staff. I find the work interesting (although sometimes frustrating), but I'm not sure how many companies want to have full-time perf people onsite. As you mentioned, It's mostly consulting type of work now as far as I can tell (so might not be suitable to everyone), but maybe this will evolve or is already evolving (I've been only approached once for webperf onsite position on LinkedIn in last year, by Atlassian, but maybe because my profile is not that well LinkedIn-optimized).

Anyway, if someone's interested, you can start by reading articles from:

https://hpbn.co/

https://web.dev/learn/

https://developer.mozilla.org/en-US/docs/Learn/Performance

https://calendar.perfplanet.com/

https://csswizardry.com/

https://phabricator.wikimedia.org/phame/blog/view/7/

And some of my own content:

https://calendar.perfplanet.com/2018/getting-started-with-we...

https://jakub.gieryluk.net/slides/rivieradev/


This looks really interesting to gain some basic and intermediate knowledge in this field, thanks a lot.


I just moved out of the ad agency/SEO industry (using a semi-burner account for that reason) and back into full-stack development. In the past couple of years I put a lot of effort into performance analysis and improvement (mainly site speed but other critical factors) but got very little buy-in from my clients. I was also looking beyond basic "SEO metrics" and the cookie-cutter output from Google Page Speed test and even building a solid ROI model from wasted ad-spend on slow sites with high bounce rates.

Is this something you're seeing a lot of demand for? If so are people actively searching it out or this just a consulting/who-you-know sort of thing?


It's incredibly popular in the ecommerce world where every 1kb reduced is a lot. Target large ones - they often use Salesforce Commerce Cloud, Hybris, BigCommerce, Magento.

Also any business with embeddable products and SDKs. No one is happy to make their page heavier with a script they don't own. Fintech comes to mind. Analytics companies too.

Anything with complex dashboards. Anything tailored to power users - CRMs, help desk software.

Figure out your pitch too - your job may save server costs (and increase development costs but maybe don't mention that), optimize response time of employees, increase productivity, or retain shoppers.


Any recommendation on how to make the e-commerce world find you? And especially the large ones ?

I was thinking about scouring the web for e-commerce sites with bad performance and just send them a cold email with some simple actionable items.


Unfortunately my experience is as an outsourced employee so not too relevant for pitching as a contractor.

But product managers are usually pretty happy to hear you out and usually benefit from referring people they've talked to. And they respond on LinkedIn.

It shouldn't be too hard, contractors were common, employee turnover was significant too. Platforms like Salesforce Commerce Cloud usually have an API that supports an older version of JavaScript so employees are a bit harder to retain and a lot depends on contractors. That's why I suggested that particular platform, plus it's easy to find their customers if you browse the SFCC customer stories.

I realize it sounds like a terrible job after the above but I truly enjoyed my years there even though the quality of the websites varies a lot.


My experience with e-commerce sites is they they tend to accumulate enough tracking and ad network scripts to ultimately kill performance.


It's really quality vs quantity. Some really utilize whatever analytics tool they use, others just throw in more tools. It's a bit of a hit-and-miss industry in terms of code quality. Even the big ones.


FWIW: I spent about a decade in application performance consulting...my own experience was that most companies only care about performance when it is costing them obvious, painful money, and even then they care just long enough to duct tape the problem and move on. I probably should write a book about my experiences because many of them show the psychosis of corporations. My point here though is that it can be a challenge field to market yourself, because there is a tendency to only make an investment when there is an emergency, rather than taking preventative steps. Once you fix the immediate problem, one would assume the client would want to insure the problem never happens again and to take remediation steps to look for other issues. Instead, my experience is that most simply do nothing until the next emergency. From what I hear, people who are security experts go through a similar customer lifecycle.

All that said - I worked on lots of interesting stuff during that time and it was the most enjoyable technical work of my career.


I currently do this for major brands as a one-man crew in a 3,500 employee company, and I'll admit, the idea of going it alone as a consultant in this space is _extremely_ alluring. It's just a matter of the right angle to get clientele in order to go it alone, which is the main stumbling block in my case due to time.

The work's consistent and perfectly suited to remote, the engineering teams I'm working with are great and consistently in need of not only the what and why, but the _how_, and monitoring the progress is pretty fulfilling work, to be honest.

Some of the best work I've had in a very long career. I frankly love it.


I work for a company that optimizes page load times via a js library. We target mainly e-commerce. It’s crazy to learn how much money e-commerce will spend to improve website speed knowing it has a lift on their conversion rate.

With googles page speed insights / lighthouse gaining popularity (mainly just because its google and not much else), there is definitely opportunity to focus on just improving those results and be paid very well.

the load/onload/document complete event is very mature with studies correlating conversion rate. I don’t believe googles “web vitals” have been tied to any meaningful business metrics... yet.


Once I performed site optimization worked and loved it. Couldn't find a way to Cash it as an alternative income stream. I'd explore it again.

Also web performance don't mean front end only. Most of db driven sites don't even have basic indexing done.


Amen brother! In the decade I spent in that space, customers always thought they had esoteric memory issues or had found some kernel bug. Nope, you just forgot to do the basics like oh dunno... check if it even runs? DB indexing? pfffttt, who does that? ;-)


Where I work, we never ever index anything. And we use text types for every column, especially dates and IDs. Fun times.


I'm a self-taught webdev too and I would strongly recommend learning SQL, not just `SELECT * ...` but really learning it!

I've been digging into postgreSQL and in quite a few applications it's possible to greatly reduce the complexity of the backend by receiving exactly the data you need from the DB. It is so much so that in cases you can even "get rid" of the backend completely (yes, no writing controllers and endpoint, etc.) by using a tool like postgREST (postgres to REST) or Hasura (postgres to graphQL)

Best of luck on your search!


SQL made the cut on my learning list !


Another option is to learn Graph Databases. I notice there's still a big shortage in people with Graph DB experience, and they're not that hard to learn. Try Neo4J, for example.


Neo4j's tutorials are great. But I also agree that they are better for graph analysis.

I've been using Gremlin for crud ops in my apps. I recommend these two resources on Gremlin:

https://kelvinlawrence.net/book/Gremlin-Graph-Guide.html

https://github.com/datastax/graph-examples


As a self taught developer I also found Neo4j's query language (Cypher) to be way easier to read than sql. Especially for building complex relationships between data which I find to be kinda a pain in sql. Also the web interface for viewing your database is really easy to use. Although I should say I've switched to using more sql databases over the past year or two because there are way more hosting solutions that support them out of the box.


Exactly. SQL is great for data that's mostly tabular, but despite their name, relational databases are not great at dealing with relations. We had some queries that required 10 joins. The same query in Cypher is trivial.

But yes, hosting solutions are terrible at supporting graph databases. Some do have a thin Graph DB layer (often using Gremlin as QL) over a Mongo-like database, but it's not the same thing.


That is not always a great idea. There is a reason APIs exist, and backend service layers exist on top of databases. It is a larger abstraction of the interface design pattern.

It only makes sense if you're absolutely sure you'll never need to extend or change the interaction between front-end and back-end.

Think just about schema migrations on the database. If you change your schema, you have to change your front-end. Maybe that's okay for the time, but that can get out of hand pretty quickly.

On the other hand, with a service layer, you could completely decouple that dependency on the front-end, by providing the front-end an interface (the service layer / API). The migrations on the database layer don't affect the front-end whatsoever, because the front-end communicates with the interface. You can change the underlying implementation without changing the front-end's interaction with the interface.

http://best-practice-software-engineering.ifs.tuwien.ac.at/p...


Don't forget that the database is not only tables. Abstraction can be done at the SQL level with views.

With views you can maintain backwards compatibility despite migrations happening. No need to change your front-end.

Check this section of the PostgREST docs for more details:

http://postgrest.org/en/v7.0.0/schema_structure.html#schema-...


Yeah, views can definitely fit certain use cases. I've just never encountered cases where I eventually don't need to /do something else/ in between those two layers. Granted I'm doing a lot of systems integration on a lot of complex legacy infrastructure, so that might just be me!


Any specific resources to recommend?


My favorite has been https://pgexercises.com/. Instead of going through theory, you practice writing progressively more complex queries to achieve a specific result.


I've only used it as a reference, but the art of postgresql is pretty solid. In general any webdev who isn't skilled at SQL is missing out on an easy way to level up. SQL is crazy powerful, versatile, and scalable, and takes a small amount of time to gain proficiency, and stays with you. I methodically read one 350 page book in 2012 and still feel I understand SQL better than most I come across. That's kind of silly. I recommend learning enough to understand the gist of aggregates and window functions. Once you understand what they can do, you can easily reference the syntax when needed.

[1]: https://theartofpostgresql.com


The postgresql documentation is actually a pretty good start (and finish!).

I like learning by doing something so I took an old side project and I'm making it on PostgreSQL with PostgREST in front of it. It is crazy all the things that the DB can do! Triggers after an actions happens, virtual columns, JWT Tokens, Unit Testing...


Using postgrest and combining postgres triggers with Elixir listeners, you can then do callback like actions on the data: https://blog.lelonek.me/listen-and-notify-postgresql-command...

Or do similar using Hasura's Event system but with webhooks.

https://3factor.app


Theory: Database Lessons by Dr. Daniel Soper (watch at x2 speed) https://www.youtube.com/playlist?list=PL1LIXLIF50uXWJ9alDSXC...

Learn by watching short videos and practicing: Mastery with SQL (paid course, $49) - https://www.masterywithsql.com/


I would recommend SQL and Relational Theory by CJ Date.

It completely changed how I use SQL. Before reading it, I had about a decade of experience with SQL. I didn't really understand the theory underneath. I also didn't understand how to write SQL in a way that adheres to the theory.

You can think of this book as being the closest we have to "SQL: The Good Parts".


Execute Program has a great interactive course:

https://www.executeprogram.com/courses/sql


Great suggestion on learning SQL. Also, learn how to normalize, at least to 3rd normal form. Clean data, enforced in the DB with constraints, makes debugging easier.

Consider getting a used Jeep in stock form, and get the shop manual. Methodically go through all of the maintenance items. Then start some easy mods, like a block heater. Good life skills.


Also learn to denormalize. Because performance matters.


I thought knowledge of sql and RDBMS's was table stakes for a Web developer job? Same with html, CSS and js.

However the more I work remotely the more I find that not to be the case.


postgREST the worst thing ever. Just use the DB to store things, thank you.


I don't see what's so bad. Seems like it would be a convenient way to skip some boiler plate back end code used for CRUD. Probably not optimal for a complex application, but it looks very neat for something quick and small.


If you're learning backend services, don't start by things like postgREST, it's just bad habbit, would be better to start by the basis with API servers / DB ect ...


As a seasoned TypeScript backend/fullstack developer I don't understand

- why is it such a bad tool, and if it is because of the tool and not the concept, it seems possible it will be fixed in the future

- why is it a bad habit; I consider the boilerplate CRUD code I write to be a bad habit that I should've automated years ago, and that's exactly what PostgREST does

- why can't you learn the basics of API services and databases with PostgREST


It's a bad habit because of separation of concerns.


You're not forced to write your app code in the DB as SQL procedures, you can also write TS or whatever else and use it next to PostgREST.


Check this thread[1] for a previous discussion about "separation of concerns" and PostgREST.

tl;dr: business logic can be done with views/sps on an isolated schema. More layers makes the overall OLTP system less performant and harder to scale.

[1]: https://news.ycombinator.com/item?id=21438307


Honestly, in terms of employment you don't need to learn anything at all. Your skillset (which is quite similar to mine) is highly in demand. What you'll probably find is that you can specialise in any of the areas you already have skills in simply by advertising yourself differently.

However, it's always good to learn more. I have a couple of suggestions:

1. Rust. The Rust book is an excellent introduction to lower-level programming languages, and also to more functional patterns. I went into it from a primarily JS/PHP, and it's been a wonderfully refreshing experience. And it's also been an excellent way to level-up my programming experience.

2. Embedded programming. Get yourself an Arduino or an ESP32, and make something that connects to the physical world. Lot's of fun. You can technically combined this with Rust, but I'd recommend sticking to C/C++ for embedded work (at least at first) because it's much better supported.

3. AWS / Kubernetes / Cloud computing. Managing large amounts of infrastructure on these platforms is an art unto itself. And it's worth learning if it's something you have an interest in. I'm not usually a "training" kind of guy, but I'd recommend doing some kind of course / using structured learning materials for this. Because there's so much tribal knowledge that needs to be acquired.


I'm in a similar situation to the original poster, and I've chosen Rust. Tim McNamara wrote a compelling post making the case for why Rust is a good choice for your 'novelty budget': https://tim.mcnamara.nz/post/621040767010504704/spend-your-n.... Rust has also made me a way better engineer in the time I've been learning it. I've used it for some dabbling in embedded dev, and the cortex-m support (especially for STM boards) is very good. I think the Rust Programming Language (the Rust Book) is a great intro, but I found that making the jump from JavaScript to Rust was daunting in some places. I put together a little intro blog post that approaches learning from that angle: https://tndl.me/blog/2020/introduction-to-rust/


By "The Rust Book", do you mean "The Rust Programming Language" ?


Obviously everyone is going to have a different opinion in this thread. I'll throw mine in there as well.

With a PHP background such as yours, I'd very strongly suggest Go over Rust. You'll pick up Go very easily (far faster than Rust, which has a high learning curve), Go jobs pay as well as Rust, it's in high demand, and it's going to remain in high demand for a long time. Most people can become productive in Go the first week they start learning it. Go lends itself to a webdev orientation far better than Rust; Rust is very weak in the webdev arena, you'll be endlessly frustrated by that fact.

My background is 25 or so years of webdev experience, with an early background in Java, Perl, ColdFusion and I've been using PHP since 2005 or thereabouts (I use it for CRUD work). Over time I added Python and then Go. I was able to be productive in Go immediately, and you'll find similar stories all over the Web. It's mostly a delight to learn.

I've also been handling nearly every aspect of the backend infrastructure for two decades now (servers, cache, security, database, etc), and Go is also very nice to deploy. It's dead simple and lightning fast for most things.

One side note, if you don't have much experience building APIs, I would put some focus there in tandem with Go. Being good at building and deploying APIs is a valuable skillset to have. I regularly use Go for such services and it performs like a champ.


Yes indeed. The free online version (which has the same content as the printed version) is available here: https://doc.rust-lang.org/book/


Thanks. Rust has been recommended a bit in this thread so I'll check it out.

Out of curiosity, what's the appeal of learning Rust ? What kind of projects do you use it for ?

I find that I can solve mostly everything with a blend of PHP/JS, but I also never escaped web CRUDy stuff, and PHP is very well suited for these.


I'm a big Rust fan and have been using it for three years at this point. However, I read nicoburns's original recommendation as "It could be fun and intellectually rewarding to learn Rust", not as something they suggested because it's directly applicable to a lot of projects.

Personally I would say learn it because it's one of those languages that changes how you think about programming as a whole and learning it will make you a better programmer in every language.

That said, I think Rust shows the most promise in a few places:

1. Pretty much anywhere you'd historically use C or C++.

2. WASM

Because Rust can expose C style FFIs you can use it to speed up hot code paths in almost all scripting languages(Python, Ruby, PHP, JS etc). This can be very useful because it allows you to keep most of your code in the scripting language that you and your collaborators are familiar with, while benefiting from Rust's strengths too.

For WASM I think Rust is currently the best choice, it has excellent tooling to work with the web, it's by far the most approachable suitable language for someone who already knows JS, and it doesn't have a big runtime or GC which makes many languages non-starters for the WASM usecase.

Some people would tell you it's a good choice for general purpose backend and there is an ecosystem around that, but I would say if that is your goal Rust offers nothing that Go doesn't do better or at least as well.


It's a general-purpose programming language, so it can be used for most projects. Most problems can be solved with most languages, sure, but rust is fast and "safe", so people flock to it.

It has some nice features. Personally I never found myself besotted with it, in fact I rather dislike it and suggest ada instead. But rust is much more likely to get you a job.


Not sure about employability, at least here. A few months ago I searched for Rust job postings in Montreal (a decent-sized tech hub), and the only three results were Morgan Stanley accepting Rust as a "C++ or similar" language, and two listings for professional aircraft painters.

Still playing with it for funsies, though.


Maybe not. As I say, I don't use it, but perhaps I'm not so immune to the hype of it as I thought.


Would you mind sharing your thoughts on why you'd suggest Ada? What features of Ada make it an interesting/useful language?


I'm suggesting Ada because in my mind it satisfies a similar niche to Rust, but offers a different perspective to Rust. Also I like it more.

Ada is part of the Pascal family, but goes further as it were in all the Pascal aspects, making it essentially the ultimate Pascal. In that regard it's interesting just by being different from C.

It's much more verbose than a lot of languages, which some people like, some people don't, I do. But even if you don't, it's nice to explore some of the design decisions taken in a language designed for use in large-scale systems with long lives.

It was created as /the/ language of the US Department of Defense, which once again may not interest you. I think that in itself makes it exciting, despite having almost no interest in any other aspect of the US.

The compiler has a linter (I guess is the right word) built in, similar to Go or something. It also checks for all sorts of other little errors or potential problems like misspellings, scope, overflows, and off-by-ones. As a language designed to be used in systems controlling space equipment, train networks, and other massive and important things, these features are quite important. I guess more languages have these things now but they were an Ada priority from the beginning.

Useful is definitely relative and for a lot of things Ada won't be the best choice. I've used it for very little, but I think it's a really well done language for the most part that suffers from not being so popular. Now that a lot of other systems languages are getting thrown around - Rust, Go, and things like Nim and Zig - I think Ada should get a share of the light too.

But ultimately I just think that "learn Rust" is said much too often with much too little justification when so many other languages that could be equally as enlightening or fun are around.


> 1. Rust.

Here they come! Right on cue.


What do you mean ?


Every time rust is mentioned on HN people talk about how wonderful rust is. They are jokingly called the rust evangelism strike force.


Every time Rust _isn't_ mentioned, the Rust people turn the thread into a Rust discussion.


It is a bit of an inside joke that people on HN have an infatuation with Rust


I 2nd the 2nd point above. But I'd say: If you check out the ESP32, also checkout micropython.

"ESP32 Tutorial using MicroPython - Let's Get Started!" https://www.youtube.com/watch?v=QopRAwUP5ds

A ESP32 mounted on a breakout board is super easy to pickup and run with-- https://www.adafruit.com/product/4172


How about getting back to the basics? You know, taking some maths classes, CS fundamentals, algorithms, data structures, that kind of stuff. It is timeless, and if you are self-taught, I can guarantee you that you have massive holes in your knowledge.

Also, might sound off topic, but learning a new language (not programming, human) could be an amazing step forward, in ways you cannot even imagine now.


Re: human languages

I recently discovered that it is possible to learn Latin by listening to it. I struggle getting through written material so I had given up on my dream of learning Latin, until I found out there's audiobooks [0] and even YouTube channels where people speak it! [1]

[0]: Lingua Latina per se illustrata by Hans Ørberg, also available in audio -- this one's entirely in Latin, yet I could understand the first few chapters very well just from knowing English and some Spanish

[1]: Luke Ranieri on YouTube https://youtu.be/j7hd799IznU

He also has Skype lessons and conversations, super cool!


My observation about most of the new spoken Latin courses and lessons is that they're teaching Vulgar Latin or something akin to early medieval Latin.

That's cool, and very interesting. As you alluded to, you're basically learning proto-Romance.

However, as you likely know, people should not expect to be able to read classical Latin based on that knowledge. They should be able to read many medieval Latin works (including many notable scientific works!), but forget Cicero, Ovid, or Tacitus. Those will require significant additional study.


Luke Ranieri has some of the best advice on learning Latin. But note, even though Lingua Latina Per Se Illustrata is one of the best Latin books available, he doesn't recommend starting with that. It's more effective to first learn your noun, accusative, dative, genitive, and ablative cases, plus verb tenses and moods, by brute memorisation. Then move on to the Ørberg readers: http://wcdrutgers.net/Latin.htm


Yeah, found out about https://teachyourselfcs.com/ which seems decent enough, it's about time to learn this stuff.


As a self-taught dev, this was a very helpful curriculum. I will say that it can be a little hard to stay motivated on some of these things if you have little chance to apply them, but at least skimming the various topics and understanding the terminology / primitives of each area is a big benefit. For example, understanding what processes and virtual file systems are is helpful even if you're not implementing page tables or whatever.


> and if you are self-taught, I can guarantee you that you have massive holes in your knowledge

Just curious, why is being self taught a guarantee for having massive holes ? Can you give some likely examples ?


I don’t know if it’s guaranteed, but here’s my perspective (as someone with 2 BScs and an MSc, who also self teaches a ton of stuff):

My personal drive for self-teaching generally stems from either a specific problem I’m trying to solve on a project or a desire to dig deep into something “cool” I’ve come across.

In the first case, I’m tugging on the strings that seem most likely to get me to the solution to the problem I’m trying to solve. There’s a bit of backtracking here and there as I choose dead end paths, but it’s usually a depth first traversal. I’m not trying to learn all of a field, I’m just looking at what I need to know to move past the hurdle I’ve encountered.

In the second case, the goal is different but the process is pretty similar. When I’m learning for fun there is usually a bit more breadth, since I’m not trying to solve a specific problem in the immediate future, but I’m also probably not building a robust implementation of anything. I’ll usually end up with a decent surface level understanding of a topic; this is useful in that, if I encounter a related problem in my work, I’ve got at least the concept in my mental toolbox already and can do a deep dive more easily.

Over time I’ve built up a pretty wide and deep understanding of a lot of things as I’ve built them, but I am also fully aware there a ton of gaps (and have a big topic list that I occasionally visit during a slow period).


Well said. I can relate to this as self taught. I don’t work in the SE field though so I feel no need to learn the silly whiteboard interview puzzles. It’s never been a hindrance to making my ideas come to life.


Heh, the closest I've come to "silly whiteboard interview puzzles" was back in undergrad competing in the ACM Programming Competition stuff. Our team made it to regionals a few times, but we never really took it all that seriously.


You had me at 'a depth first traversal'.


Not OP, but I think there are two main reasons for this. Firstly if you are a professional you probably only had time to teach yourself what you needed for the job at hand. This is a great skill in and of itself but by definition it favors practice over theory. Secondly, if you're self-taught that means you didn't have a mentor and likely you don't know what you don't know. It's impossible to study topics you've never heard of, or whose connection to your field you're unaware of.


> It's impossible to study topics you've never heard of

If only there was some way for people to communicate these linked topics in some sort of portable written format!


Steve ?


As a self taught person this lines up with my experiences and it depresses me that I 'missed out'. But I try to make up for it by continuing to learn, I'm just now really getting into Information Theory though and can't help but think how this intuitive understanding would have helped me twenty years ago.


My best guesses for likely examples:

- Pointers and understanding how operating systems address/access memory at a low level.

- Hashing (This one may seem a little insulting but I have seen otherwise good developers confuse hashing with encrypting and it seems like an easy mistake to make if you haven't worked specifically with either concept)

- Binary math, logic, and encoding.

- The OSI model.

- Parallel programming, the program counter, and how operating systems execute/switch programs.

I would not count these as "massive" holes and it is also likely that these concepts would be discovered by a self-taught developer especially if she has looked for material from college-level CS courses.

None of this stuff is necessary to make great software but having this knowledge can help make other things easier to learn or understand. It's like the difference between knowing how to use common git commands and understanding how trees of objects are used to form a chain of commits.


For anyone not aware, Ben Eater on YouTube does a really good job explaining a lot of these topics


Because when you learn alone you don't know what to learn. You usually only learn what you need now.

I would not say "massive holes", as that would somewhat imply that this knowledge would be actually required, even though it's usually the optional, nice-to-have knowledge that you are getting from an actual CS degree.

You can still create whatever you imagine even if you are self-taught, but going through university would make it a lot more likely that you understand better the tools that you are using (algorithms, microprocessors, logic gates, electricity, quantum effects, etc.) so you will better know how to use them and what their limitations are.


I think that in general you CAN learn and skip those holes if you have someone to guide you that already knows the subject well.

But as a person who may be really new to the subject of development and computer science I think it's obvious that without a lot of research and prep ahead of time you might start with a book or topic and keep moving forward, but you may not be exposed to all of the same things (some probably really useful, some are likely bullshit) that you'd get in a more structured learning environment.


Everyone has massive holes in their knowledge, but holes which formal education tries to address tend to stand out more.


Have you considered open-source development? [1]

All the languages and libraries you've listed are open-source projects started by someone like yourself.

> "having done every type of CRUD under the sun - what do now"

You have a lot of experience developing CRUD, why not build something that alleviates the pain of CRUDdy development. What annoys you? What sucks and could be done better?

Anyway, just a thought. Good luck to whatever you do.

[1] https://i.imgur.com/qr7Sr8B.png


I'm far from being good enough to contribute to open-source projects unfortunately. I can make lots of things work but I don't know enough advanced patterns and low-level stuff to contribute in a meaningful and maintainable way.


You could start by triaging issues, something that is very tedious for maintainers, especially on small projects. More than that, you can look at each issue and try to see if you can identify the problems. You may find you are better than you think.

There isn't a level you need to be to contribute - it may feel like that because on higher profile projects most of the low hanging fruit has already been addressed.

Beyond that, there's a skill you learn here - practice communicating professionally (sometime people are submitting issues when they are extremely frustrated), concisely, and clearly (sometimes you need to speak highly technically, other times speaking with a management voice is needed)

In the same vein, there's plenty of poorly documented READMEs and wikis, other areas you can contribute, and skills that are very important.

Strong communication and writing skills can level you up over better developers.

(I'm a self taught developer from the late 90s)


I think the barrier to contributing to open-source is far lower than you imagine. There is, for example "good first issue" tag on many repositories (search Google for terms like "awesome for beginners" etc).

One example, I recently contributed to chokidar - something that is used by webpack, VS code, etc - fixing a bug that prevented network path access, and all it took was a conditional statement to handle the edge case: https://github.com/paulmillr/chokidar/pull/1025


The barrier to entry of open-source is far lower than you think (I'm proof of that!)

Most great projects that have advanced patterns evolved from simple toy projects. They only became advanced with the collaboration and help from internet strangers ;)


Just sent my first pull request. Here goes nothing !


If you're looking for a project that is amazing and could use some love I recommend librivox. I think your skills would be great for helping them. They recently put out an ask here: https://news.ycombinator.com/item?id=23558686


Find a project that you like, and want to support. You could write a blog post about this, a guide, a historical review of the project, a list of people/companies using it. etc.

Most open-source projects need communication attention more than programming work.

You will do a great helping giving attention to an opensource project.


What better way to learn then?


This. I think it's pretty good practice to check out what's going on under the hood in libraries you use, or plan to. Sometimes you find interesting libraries or techiques, things you could improve and in rare instances that you need to stop using it...


That's a good point.


This is a terrific suggestion, as it adds value in multiple ways:

- working on open source helps the community generally

- it's a good way to advertise your skills as a developer

- if you need to learn more stuff in order to contribute effectively, well, that tells you what you need to learn!


In case OP (or others) are interested in getting hired to work on open source, some resources:

https://www.fossjobs.net/ https://github.com/fossjobs/fossjobs/wiki/resources


I found that learning and writing some Clojure and Go made me think better about the code I was writing in my main language (python).

I enjoyed working through Clojure for the brave and true: https://www.braveclojure.com/clojure-for-the-brave-and-true/

and the go tour is probably the best introduction I've ever had to a language: https://tour.golang.org/welcome/1


I can imagine the impact Clojure had; learning about Lisp had a big impact on my programming journey.

What was it about Go that made your Python code better, though?


Go helped me learn about designing good interfaces, and how to write tests using dependency injection rather than just patching stuff out.


This is my recommendation as well, although since you mentioned it, I would throw in SICP as well,

You can work through SICP to help learn Clojure/LISP at the fundamentals level, and then expand out to more practical use cases with the recommendations above.


I came here to suggest these two languages, too. On the other hand, you could focus on building something non-web. A language, a video game, etc.


That's a good idea. It'd probably be great for me to start a non web-app side-project.


Because the syntax alone is already so different it was a great way for me to "re-learn" programming. Even for the very short while I played with it, it really thought me to look further than the default go-to patterns I used to use.


It seems you are good at building web CRUDs, but complains it is boring. It is boring because it is repetitive. Create a web CRUD builder. Computers are there to cope with repetitive tasks. You can put your expertise in the builder. You will continue to earn money by selling web CRUDs, but you should take your art to a higher level. Repetitive tasks are an opportunity to increase abstraction (like in SICP) and write smart programs. Try to find your ikigai.


To expand on that, if what you are doing is simple crud, it might be possible to completely ditch the backend and use https://hasura.io/ and talk to it directly using graphql. It can also generate typescript definitions which is another suggestion I was going to make. Using it made some parts of js more obvious and gave me a lot of confidence working with it.


I like this. It would be a nice challenge and end up with a solid product. Abstraction is the most valuable concept is computer science.


You could take some time to familiarize yourself with Docker and how to deploy a full-stack application as a set of "microservices" that talk to each other. It's really helpful for getting closer to understanding infrastructure, scaling, and deployment.

You could familiarize yourself with some crypto things like running a Bitcoin node and maybe Lightning (Bitcoin's layer 2), and then figuring out how to deploy it or build a website that uses your node to accept payments for you or on behalf of others.

You could start a side project that uses both, such as a blogging platform that lets users publish articles that can be unlocked with a crypto payment rather than a subscription or credit cards. You could use both containers and Lightning to do it and learn both at the same time.


This is definitely what I would do if I had lots of free time!


I read this book. https://www.amazon.com/Designing-Data-Intensive-Applications...

And it was really enlightening. I would heavily recommend it. It starts off by teaching different types of implementations of different parts of DBMS. Then goes on to teaching about how distributed systems deal with various problems.


It's actually recommended in the teach yourself cs curriculum, so I'll get around to reading it !


i'm a mobile application developer aspiring to learn backend. will this be a good read for me if i have negligible experience on server side of things?


You would definitely benefit from doing general backend side projects and reading before reading this book. I don't think you'll have enough context for it otherwise.

However, the book is definitely relevant to mobile applications. The backends for all the most popular apps are built with systems described in it.


thanks for the suggestion.


Just my two cents: I'm a front-end dev, and I found this book to connect with me a lot more once I also learned some backend.

Earlier this year, I read a few chapters of the book, and it was really abstract to me, so I stopped reading it.

On a whim, I had two developers teach me SQL and relational database theory. I spent a few weeks creating a few databases and connecting them to the front end to mimic real life application, before picking up the book again and the book made way more sense.


thanks, makes sense to me.


Not really in my opinion, the book is really about the data aspect. Probably your best bet is to just pick your favourite programming language and build something in it.

The book is great but not what you seem to be looking for.


i'm not looking to learn backend through this book, I find the content of the book interesting and just wanted to know if my inexperience with server-side hamper my ability to grasp the content of the book.


I'm not sure if this scratches an itch for you, but I would learn more about business via the route of launching a small side-hustle. By having skin in the game, you'll learn a lot about product trade-offs, marketing, selling, etc.

In the best case, you get a profitable side hustle going for yourself (and increase your financial independence). Worst case, you go to your next programming job with a ton of extra skills and insights that have excellent commercial value in the workplace.

I recorded a few videos showing the big picture of my first side hustle (code + marketing) and these might make it concrete and real for you: https://www.semicolonandsons.com/episode/Bird's-Eye-View-of-...


Suggestion: Dig in to the very bottom of your computing stack and get a working knowledge of your CPU, bootloader, OS kernel, system libraries, etc.

Along the way, you will want to try: - Using a debugger to step through simple programs at the machine level and see what happens to the registers, stack, etc - Using tracing tools like strace (for Linux) to see what syscalls various programs issue (this is after you learn what syscalls are and how your OS handles them) - Playing some old-school hacking wargames like vortex, utumno, etc. These are fun and really make you learn the low-level details of how your OS loads binaries, memory layout of processes, etc.

Most developers don't know this level of the stack, and when you are the one guy on the team who does, it's a bit like having superpowers.


Do you recommend any books / courses that could help give me some sort of curriculum around this knowledge ?

I unfortunately don't know what I don't know, so I'd need a bit of guidance to learn efficiently. Something like http://pages.cs.wisc.edu/~remzi/OSTEP/ maybe ?


I really loved this book: https://www.amazon.com/Code-Language-Computer-Hardware-Softw...

Which goes from bits on up without shying away from circuit diagrams. It's also really well written and you can read it from start to finish.

It puts it in a historical context too which makes it fun to read.

Once you read that, they'll be fewer unknown unknowns.


This is a far better idea than "Operating Systems: Three Easy Pieces" as suggested by the OP.


A great place to start before diving into books would be Ben Eater's videos on YouTube.

https://eater.net/


Please feel free to privmail me and I will try to share some ideas.


You could learn python/machine learning.

https://www.coursera.org/learn/machine-learning

There are a bunch of guides like the coursera course I mentioned and on youtube there is the official tensorflow channel also!

https://www.youtube.com/channel/UC0rqucBdTuFTjJiefW5t-IQ


I second this. With Webdev + Machine Learning skills, you could build interesting products.

I give you an example from my life. I build PredictSalary (https://predictsalary.com), a browser extension to predict salary range from job opportunities which don't disclose salary range.

A browser extension is basically a bunch of JS files injected to web pages. If you know webdev (frontend), you are set to build a browser extension. All you need to learn are machine learning and deep learning. You don't need to dive deep (unless you want to). In my case, basically I just use basic regression to predict salary range.



I also highly recommend ML, not for the experience (though it may certainly come in useful) but because it's surprisingly entertaining.

Last year I had a lot of fun playing with GPT-2 on Google Colab (you can run it yourself on a decent GPU tho). My friend and I were trying to generate the funniest possible output to make each other laugh -- as an aside, this might be the only category where GPT-2 beats GPT-3 hands down :)

Python is also a joy in its own right. xkcd said about Python "programming is fun again!" and that has certainly been my experience.


I'll suggest something different,

leetcode.com

seriously. it will give you a lot of confidence with algorithms and DS. You'll be able to look under the hood of many webdev/data frameworks.

hey it might even give a higher paying gig ;) , but don't worry about that.


Entrepreneurship? Getting more technical has a diminishing ROI after 10 years.

Or something completely orthogonal to computing. Something you enjoy. For fun.


> Entrepreneurship? Getting more technical has a diminishing ROI after 10 years.

Does anyone do anything just for the hell of it anymore, or is it all driven by money?


I'm driven by money because everything is getting more and more expensive :)


Well money is a requirement to live, and if you can do what you enjoy and get paid the money you need to live doing it, what's the problem?


I disagree on this. A senior developer in any language will make far more, 2x-3x, what a junior developer will make.


There is a hard plateau on how much you can make as an employee though. If you can build something and own the business, it's unlimited.


There’s also a floor when you’re an employee. The floor for an entrepreneur is $0.


Yes, you should have some sort of income, hence I'd recommend working for others until your own business makes enough to support you.


Can make.


Learn C. Then maybe one of the newer systems languages like rust, zig, D, nim, etc. If you’re bored with CRUD, there’s a whole other (bigger) world to explore when you get a little closer to the metal. It’s tremendously empowering and fun as hell to get you’re hands dirty a bit, so to speak. You’ll also become a better and more employable programmer as a nice side effect.


Second this. I used C for the first few exercises of the 2019 Advent of Code and it was SUPER fun. Granted, things that could been a single line of Ruby or Crystal took a few hours for me to cobble together in C, but my level and depth of understanding went WAY up. Totally worthwhile.


C or C++ ? Thought about it, at the very least it would make me a bit more well-rounded.


You should learn C. Life is too short to struggle with C++ now that we have better alternatives such as Rust.

You can also ignore the people who ignore the complexity of web apps. Classic C programs are very often much simpler than full web apps IMHO.


C it is then. Thanks for your input.


Happy you chose to learn C. That's exactly what I would recommend.

If you are so inclined, I'd look into how to write your own home-grown version of Objective-C—given that valid C is valid Objective-C.

Because then you would learn Smalltalk and the whole ladder of it all! Smalltalk is far and away one of the greatest joys on programming. :) http://objective.st

The "Gang of Four" explains the patterns in Smalltalk and in terms of entrepreneurship—Patrick Collison's first startup was written in Smalltalk and I think early introduction to it leads to the clean design and success you see coming from Stripe.


Building a language would certainly be a crowning achievement. Thanks !


You might find it interesting to write some native macOS or Windows software (ie using the native GUI library). If you've mostly focused on web software you might find the different strengths and constraints of truly native code inspiring.


Modern C++ is fairly easy to learn. At-least easier than either Rust or C.


I personally don't think this is true. I worked a lot with C++ before and I'm still confused by the syntax and logic behind some concepts like (just randomly selecting some links from the dynamic memory group).

https://en.cppreference.com/w/cpp/types/remove_extent https://en.cppreference.com/w/cpp/memory/shared_ptr https://en.cppreference.com/w/cpp/memory/polymorphic_allocat...

I think the basics that are similar to other languages (data types, basic pointers, basic references, classes and OOP) are indeed easy to learn as they are basically the same in most programming languages, but the more specific memory management and weird syntax around some standard libraries make it harder to learn, use and read. Let's be hoest, correct C++ code usually looks ugly and verbose.


shared_ptr is fairly understandable at-least from an application developers usage point of view.

std::remove_extent is only used for template metaprogramming and generally in linear algebra libraries. polymorphic_allocator is an expert facility.

Apart from shared_ptr, the other two are for very specialised purposes - 99.9999% of all C++ code ever written will never have them. But if you need them, you can leverage them.

I came from high level languages (JS/Java) and I found modern C++ pretty good - wow I can code native!. I found writing in plain C very difficult and laborious. I found Rust conceptually far more difficult than C++. Also you can't take your traditional data structures and write them in Rust. You have to do it the special Rust way, which makes it a plain when you are just trying to follow the code/pseudocode in a paper.

Admittedly, the Rust compiler catches pretty much everything you do wrong. But I code C++ with all warnings treated as errors along with static code analysers and they catch all my mistakes too.


I've written 5-line C++ programs which have stumped experts for hours. There's a trilogy of books about all its edge cases and best practices for working around them... C++ still has a place, but not as a beginning systems language.


I hope we never judge how easy is it to learn and use a programming language by obfuscated code contests. All languages will fail by that measure in their lifetime as they accumulate cruft.


This wasn't obfuscated code. This was a MWE, where I was trying to understand why it wasn't working as expected.


This language is so extensive and seemingly has so many dialects that I find it really hard to make sure that what I'm learning is modern C++.

Can you recommend any literature?


zig is a fantastic alternative to C. The community is mostly C programmers who are sick and tired of undefined behaviour and #includes in C, but if you let them know you're a webdev looking to learn zig as a first low-level language I think you will find a relatively welcoming community.

Undefined Behaviour: Stuff like this - https://twitter.com/jfbastien/status/1280709082626666498


C is probably better, less abstractions.


I would add SQL to the list


Good point. I'm relying on ORMs too much.


Try functtional programming using ramda.js to step up your js skills; try putting up a prom & grafana stack for monitoring, try using something like django & drf for your APIs (django is somewhat a large web dev market & is really solid, DRF will make you go lighting speed on your dev, it will also step up your permissions programming skills) ; work up to 100% coverage with unit tests and then write e2e tests that reflects the specs, ElasticSearch is a valuable tool to know as well (for logging or be it to use it as a search engine for one of your projects) - get 100% score on web.dev, do not use any css template and actually master it (all that flux / grid system is still a mess for me) (use variables etc..., maybe even scss or sass to be able to loop and whatnot) ; the list could be lot longer but one thing i learnt is that iterating on architecture is a lot more beneficial than spitting out features


Oh and if by any chance you are not efficient with linux & docker do it !!!!!!


Any advantages of using Prometheus over telegraf?


Hey,

Let's meet up online and play hackthebox.eu together for a bit. My idea is to simply pick a live box and hack it together. You can pick the difficulty. I've done 6 years of CS degree programs (1 bachelor, 2 masters), 1.5 years of software engineering experience and done security courses (network security, hardware security and reverse engineering) as extracurricular subjects.

Anyone who feels up for the challenge, my email is in my profile.


Seems like something in signup is broken. Every code I get back fails.

edit: Scratch that. Took about 5 or 6 codes to finally work for some reason.


This is nice idea, see if you can use us to build interesting playgrounds on your site. We are in based in UK as well (Dorset).


If I seem to create the impression, I am simply a user of hackthebox and a pentesting enthusiast :)

I'm not affiliated with it.


Get into security, specifically web app security pentesting.

You'll thank me later.


This and the servers/linux stuff is the most interesting part of my job. I do have my doubts about being able to get into it since I suppose you really have to master low level dev (which I don't) and I don't think I can get a job as self-taught in this field.


Why not try it out by start messing around with it and get a feel for it? But to answer your question: no, you don't. You already have more than enough prerequisites for an easier transition.

https://pentesterlab.com

https://portswigger.net/web-security

Have fun!

Edit: I'm completely self-taught and I've been working in the field for a few years. No dev or even IT background prior to getting into network pentesting and web app pentesting.


Neat, thanks for the advice. Pentesting got a spot on mr. learning list's wild ride.


> I don't think I can get a job as self-taught in this field.

Good security firms are the last ones to gatekeep over a degree or other paper.


If you like devops and security, have a look at SRE (Site Reliability Engineering) positions. Companies look for software engineers to fill these positions. And you'll work on security related stuff. Not necessarily pen-testing per se, but network security, operational security, etc.

Also, teams with SRE expertise most likely use modern tech because SRE itself is a rather new way of managing infrastructure. So you'll probably be able to get your hands dirty with lots of cool tech.


Nice, thought you needed sysadmin background for SRE. I'll look into that, thanks.


Curious - why do you suggest this field?


It's a rapidly growing field that has more jobs than people. Meaning, at this point if you have a solid dev background and strong practical skills in security you're most likely going to make bank.

While anecdoctally speaking, I know people who switched from senior dev positions at two of the FAANG companies to smaller security companies and basically doubled their income and making north of $500k/year.


Any way to contact you for learning/career advice ?


What I can share is my roadmap how I manage to break into the field without any prior professional IT experience.

1) Linux. Learn it and live in it.

2) Linux servers and databases.

3) CompTIA Network+ (only for the knowledge, didn't bother getting the cert)

4) CompTIA Security+ (same as above)

5) OSCP certification (not a golden ticken by any means but it helps to bypass HR)

That's basically it. While going down that road I focused on hands-on practice by actually hacking into machines with the help of following resources:

A) Hack The box (hackthebox.eu)

B) PentesterLab (pentesterlab.com)

I also really like Portswigger's Web Security Academy (portswigger.net) and Try Hack Me (tryhackme.com) but they weren't around when I was starting out but I would definitely check them out, especially if I was completely new to security today.

All in all it took me roughly a year but get comfortable enough to start applying to junior pentesting positions and eventually I got hired.

There are probably better and easier ways to do it but that's how I did it at least.


Hey thanks for this! I'm a senior dev and I just left my job. I'm going to be learning and studying full time but hopefully it doesn't take an entire year before I can get a job


Not OP but did you got a remote position after learning and practising all this because I'm interested in only remote positions.


I did not get a remote position. I eventually left the company though and started do consulting instead so I'm mostly working remote (and 100% at this point due to covid).


ok, thanks.


Thanks a lot !


I'm looking to go into this field too and would also like to hear why


If you're not already well-versed: get familiar with Google Analytics, Google Tag Manager, Funnels, a/b Testing etc. It's cool to know other tools as well, but privacy concerns or not, GA + GTM are the default. They're largely underused, but my experience is that clients love it when you can set it up for them, especially in combination with Adsense/Adwords to optimize their campaigns.


Why not try something very different outside of programming? Such as learning to play an instrument, a foreign language, Jiu Jitsu etc. In the long run, such offbeat pursuits have a multiplier effect.


I learned Banjo a few years ago while freelancing. The trick is to hang it right next to your desk. You'll play it way more and keep playing it as a nice break (vs watching youtube videos).


Oh, I already have lots of outside hobbies. I'm just trying to make work more fun (I do realize how privileged I am to even think this.)


Learn web3.js and build dapps. You already have most of the requisite skills under your belt.


I haven't encountered any dapps yet that are useful in day-to-day life.

Are there any popular or important ones you could recommend?


Compound, dYdX, crypto kitties, uniswap, Dai, Lightning network, Augur...

These are mostly financial apps. Compound for example provides the ability to earn decent interest rates (currently ~2-6%) in a time of 0.1% at banks. That's definitely important for people taking it seriously and using it to grow real savings. It's not a joke or a toy, it's used for real investments.

Lightning is helping Bitcoin become more usable. dYdX, uniswap, and dai are important infrastructure for the crypto economy. Cryptokitties is a game that is not important but is popular. Augur gives insight about the future.


Right now best examples are mostly NFT games like Axie Infinity and NBA Top Shot. DeFi arguably qualifies... Decentralized replacements for many siren server offerings will likely be developed over the next decade, no harm in getting started now.


How is your knowledge of regular expressions?

Spending a few days to learn them well² is really worth it.

--

² it's also worthwhile to know how they are working under the hood if you want to write high-performance regular expressions


I love them and went through https://regexcrossword.com/ for fun, they're great tools.

I have no idea how they work under the hood though !


Knowing how they work under the hood will help you to write better expressions that perform well and don't waste performance.


^^^^ I'm not a dev, but regex is so much better when you understand what it's doing (I'm not claiming that knowledge in full!)

The Book: http://regex.info/book.html

I bought an older edition for a lower price, got through 7 or 8 chapters, and never touched it again- and I STILL gained huge amounts of knowledge and am much better at regex than I ever thought I'd be.

Highly recommended!


Honest question, why would you read a book about Regex? I personally find it a lot easier to learn how it works just by going to sites like https://regex101.com/ and trying things out while reading their docs.


Because it was highly recommended to me by a sysadmin I respected who was extremely proficient with regex. Sure, there are sites too, but after reading the book, the sites weren't really needed. I personally got more value from the book. It's subjective, of course.


Best way is to build your product. A real world product. There only you will be able to confront upon the wall of Reality .... Even the lightest simplest product is the best tool to really learn, as you confront, think, invent, try and errors everything.

Languages have no meaning if there are not tested in real space. I lost a lot of karma here because of discussion on PHP (I am a ruby guy). But at the end you can keep and relie on PHP, because until you don't see yourselve flaws, then those flaws doesn't really exist. And only then you choose your language that will correct problem the right way ;)

After your product is done, show it to us here, return to HN and expose your vision, and receive rewards and critics at the same time.


Please learn how to actually make money off web development and let me know how you do it. I've noticed a huge disconnect between what people think a web dev can/should make and what I've been able to get from it.


100% self-taught here. I change $150/hr for full stack Rails work and none of my clients have batted an eye at that. I’m thinking about raising my rates, actually.

If you know what you’re doing, I can assure you, making money is not going to be one if your problems.


Wow, I must be a complete idiot with this stuff because I can't get people to give me even 150 bucks for a full website right now. How do you actually get these 150/hr clients? Please don't tell me I need to work in Silicon Valley for some years and get the "contacts", cause I don't want to live in the US anymore. Tell you what, here's my site: https://www.andeswebdesign.com, if you like it, just send me all your work and I'll do the whole site for you for an hour of your pay. I also have a PhD in computational and applied mathematics if you want to put some real deal data science pipeline in it! I've never made a cent off of that PhD either, so maybe you're the guy who breaks it all open for me.


Probably because websites are commodities at this point. I'd never charge people to build a website. Just point them to Wordpress/Squarespace/etc.

You definitely don't need to work in Silicon Valley.


I think you don't want the kind of client who wants a website for $150. Good clients will be turned off by the low price. I'd try going for a less bargain basement look and pricing structure.


I live with my wife and son in Ecuador and 150 is actually pretty competitive here. Our main competition charges 200 I think. But I agree with you that it is very low for the US/EU market.


I assumed you might be looking for clients in the US. If that's the case I do think it pays to price yourself up rather than down.


I think your contact form is broken, or I just sent you like 8 messages trying this in a few different browsers.


I don't doubt it, we just redid everything last night. Please give it a shot later, I'll go fix it.

EDIT: it's redeploying right now. Please send me a email at erdos4d at gmail if you are actually trying to get in touch with me for business and not just testing the form. Thanks.


No pain, no gain, they told me.


I have been trying to do this, and my biggest problem seems to be actually finding clients. After exhausting my social circle asking for work, it seems really hard to land a client. I am not even able to get anyone on the phone, and all emails are ignored.

Any suggestions?


I might be talking shit, but one solution would be to make the clients find you instead of you finding clients. Make them want you, see you, look for you. You can do this by being active in the relevant social circles/platforms while being respected by your fellow programmers. It's hard to learn how to market yourself, but if you do it well you can easily have clients reach you.


Yes! Build something. Contribute to open source, do some charity work, personal project you care about, teach a class at a local code school/college, make a tutorial video, etc. When you have a track record of good work, people will find you.


Could you expand on how long you've been doing it/how much experience you have, and how you go about finding clients? :)


I learned to program for a startup that I founded about 8 years ago. Once people saw what I could do, they asked me to help on their projects.

It's all been word of mouth. I don't advertise, or even have a website for my consulting business. I'm generous with my time and volunteer to teach classes, give talks, meet with anyone who's learning and wants to chat, etc. So, I'm sure that helped.


It looks like you're in Ecuador, and that makes it a lot tougher.

1. Are you an agency or a solo developer? If it's just you or you and a friend or two, you might get a better response building up your personal brand rather than representing yourself as an agency.

2. I can't judge your technical chops, but I can see that you have room to grow in UI design. I like this youtube channel: https://www.youtube.com/user/DesignCourse, but there are tons of design resources available.

3. You might need to focus more on sales. Is there a small business you like that doesn't have an online store? Call them, email them, go visit them in person- try to make a sale. You could offer the work in exchange for products at first- once they are happily selling online, they will tell other business owners, and you can get more referrals and raise your prices.


Thank you for your feedback, it is very appreciated. Some answers:

1) I work with my wife at this, so we are a team, though web development is new to us. I got a PhD (math), used to be a backend, and then a data scientist for awhile, but I do not know how to sell these things at all, so we tried web dev, since it seems some people do apparently live off it. I've tried marketing myself as a freelancer in the past and have made literally zero cash from it, so we gave up on that and rebranded as a web dev shop. The rewards seem the exact same, though I can pretend to be a CEO now:)

2) We will check this channel out, thank you. I don't think either of us is strong on design, so this is a valid criticism. It is a goal of ours to improve in this dimension.

3) Neither of us has any contacts who want to buy any software, so we agree with you on the importance of cold selling. We are starting up this process now, and trying to run some ads, but Ecuador has only a 30% online presence anyway, so yeah...

Please keep us in mind if you need anything though, our entire family lives on 300 dollars a month, so I'm quite sure we can undercut virtually any competitor's deal. Thanks:)


Mobile or desktop dev (not Electron or React Native). See how the other half lives.

Last I checked Apple TV recommends a markup+JavaScript development process for standard TV streaming applications. It's not a web environment, but it should feel pretty familiar. Easy transition, knock out a demo app and you could start pulling contracts for that, maybe. Dunno how hot that market is.

I'd second others with leveling up with SQL. Maybe also dig into esoteric or advanced uses of HTTP daemon software, Redis, et c.


Yes. Native mobile would be a great side project coming from web dev. You'll learn new languages and tools which for me helped me become better web dev.


Any specific resources you recommmend for learning react


Well I wrote not React Native for mobile dev, but I'm the wrong person to ask in any case. I learn best by starting a project with something I'm totally unfamiliar with and just... going. In fact I find learning other ways almost intolerably dull and am unable to stay focused, when it comes to computer stuff (other topics, I don't have that problem). So from my perspective, the answer to "how best do I learn this computer thing?" is going to be "just start a project—ideally one that pays" about 95% of the time. Or pick a simple-enough-looking but not-dead project in the tech on GitHub and start contributing.

I gather other people like reading docs (OK, that's alright) or tech books (ugh) or watching videos (double ugh) or listening to podcasts (triple ugh) to learn computer things. I almost never do most of that (aside from consulting docs), especially not when first approaching something. I am, therefore, just about the worst person to ask about resources for learning any computer thing.

My only suggestions other than that would be to use Create React App, because the alternative is the sheer cosmic horror or a complex JavaScript build, and that goes at least double if you're doing React Native rather than browser-targeted React, and to start a React project with TypeScript because without it JavaScript is kinda miserable, and there's little reason not to.


Beside SQL which is strongly recommended, it's good for you to know static typings, java and c# comes to mind (haven't tried go, anyone can recommend it or other suitable)


TypeScript is the obvious choice for an experienced webdev. It's worth spending extensive time on to get good. Learn generics and advanced types to the point of not needing to look things up.


I need to mention that though TS is good, it's static typing is optional so op may find it different with java or csharp


Setting noImplicitAny should be adequate to address that. Java is getting type inference soon too.


Try to get maximum Google Lighthouse scores. Get into functional programming and useful patterns (e.g. state machines). Try a TDD side project and get a feeling about test coverage. Maybe develop a view about next gen tools / compilers like SvelteJs. There aren't too many people who're able to write a well structured and maintainable, secure high performance web app with a high test coverage.

Career cheat: If well known open source projects merge your code, that's worth a lot!!111


Great time to read some books if you haven't already.

- Mythical Man-Month

- Design Patterns

- Code Complete


Try writing an operating system in rust https://os.phil-opp.com/


Besides all kind of data science/machine learning, what about learning the "greybeard" mastering of Unix servers? This will connect a lot of old-grown idioms (think about daemons, classical TCP services, etc.) and get you a lot of knowledge in networking (which has connections to event-based networking and thus asyncio, greenlets and all that).


That's probably the most interesting part of my job ! Making some small scripts, managing the build step, servers etc.

Although I'm not sure you can get this kind of job as a self-taught dev with no degree/certifications.


Absolutely you can. Just build up some real experience. Some certifications help as well. Just be careful the ones you spend time and money on.


DevOps, SRE, CloudOps. Things are starting to trend where full stack jobs requires knowing how to build (usually with containers) and deploy (usually into a PaaS) your application.

How do you manage a build pipeline, how do you provision appliances in a cloud provider, how do you monitor your applications if shit goes wrong, etc.


Based on his responses elsewhere here, it looks like Ops / Admin oriented things would be his groove.


Indeed, that's what I took away from reading the answers !

This thread has been a great help, I'm thankful for each response.


If you haven’t done any functional programming I can recommend this course:

https://www.coursera.org/learn/progfun1

The techniques you learn there will transfer to javascript and make you a better web developer.


Thanks for all the great answers, they all helped me think about what I wanted to go for.

I'll be focusing on linux admin / devops / security and brush up on the parts I've missed (computer science basics / SQL / C...)

I welcome every course / book / resource advice !


Hi fellow self-taught web-dev with (almost) a decade of experience.

Since we have no formal education we need/want to constantly learn new things in our free time. This is both fun and can be very impactful.

Learning for us is a habit, or even kind of an obsession, but we should always look at topics with a pragmatic eye too.

All of the things I list here helped me do a better job (qualitatively) in some way or another. This is an incomplete list but hopefully you find something useful in here.

In the past:

- SICP => fell in love with Lisp and started to "get" what programming is about. Hard to explain.

- canvas, SVG => out of necessity at the time, pushed me down a rabbit hole of linear algebra. If you touch GUIs then a solid understanding of these concepts is multiplying your productivity and ability.

- Go, programming language => first I didn't have a use-case for it. Glad I learned it because it sparked a strong interest in learning languages. Every next language was incrementally easier to learn.

- theoretical computer science, algorithms and data structures => these concepts are typically taught in CS/IT courses. They are incredibly powerful, important and timeless. Some of the most practical and powerful concepts for web-dev: complexity analysis, graph data structures, FSMs.

In the more recent past:

- Clojure => I have a strong appreciation for data-driven, functional programming and REPL driven development now. These concepts fit very well into web-dev.

- SQL in depth => especially temporal data-modeling. I started asking questions like: Can I do this in pure SQL instead? The result is a much higher appreciation for the language and a more productive approach for both backend design and programming.

- Regex in depth => a nice data-driven approach to handling strings, ubiquitous and practical.

- writing a compiler => this blew my mind. everything is a compiler...

Currently:

- Rust (and WASM) => I wrote a little automation tool with it so far and hope/expect that the language will become empowering even in web-dev.

On the horizon:

- Julia => I hope to dive deeper into math and linear algebra specifically in a practical way, also I assume that some data-science (specifically analysis) concepts help me to develop better solutions and broaden my horizon. I my goal is to use Julia as a vehicle for this.

- WebRTC, video/audio streaming

- WebGL => I want to dive deeper into graphics programming


Nice, that's really interesting ! How did you touch so many different languages, was it only on personal side-projects or did you learn on the job ?

I'm afraid learning too many different languages just for fun would be detrimental on my main "job" language, like I'd forget the main patterns. But probably not.


> How did you touch so many different languages, was it only on personal side-projects or did you learn on the job ?

Mostly in my free time yes. But I've also written tools I use in my job now. With Clojure I've written a data integration/migration tool that I use directly in the REPL. In Rust a small automation tool that fetches some APIs and puts the data into a PDF (because the document has to be printed and signed by hand).

> I'm afraid learning too many different languages just for fun would be detrimental on my main "job" language, like I'd forget the main patterns. But probably not.

I get the feeling but it is completely the other way around. You get a better understanding of languages and programming in general and many concepts are language agnostic. The next you thing you learn gets easier because you know what questions to ask.

Learning Clojure helped me write better JS, you can even compile it to JS and integrate it into a JS application as well.

Rust teaches me to write better imperative code. Allocation and lifetimes for example are language agnostic concepts once you see behind the abstractions. Also with WASM you get to use Rust from other languages like JS and even PHP.

Tips/opinion:

- I don't learn a new language that doesn't challenge me in some qualitative new way. For example if you know Java, there is no point in learning C# in depth except you are looking for a specific job. You can almost always directly translate Java concepts to C# concepts and be fine.

- I prefer learning a new language that also lets you do a thing you couldn't do before. For example tapping into a new runtime/community/mindset. Or doing things way faster, or dynamic. Or interacting with a set of libraries that have a different reach.

- Languages itself are not the most important thing. It is what they carry around that is interesting and useful.

- I also prefer learning languages that have some useful interoperability with the ones I already use. The ones I mentioned above are in this category. Another big one would be C. Not a strict rule though.

- As I mentioned: SQL and Regex are probably the most important languages to learn and get a deeper understanding of as a web-dev.


I would recommend webrtc too, its going to be a future for video stuff for a while in browsers and so on.


A different perspective on the server-side of things might be useful. Could either go lighter like Firebase, or thicker like Rails/Ruby, Django/Python, Phoenix/Elixir, or Yii/PHP. They have more structure and let you tune things differently.

Certainly being exposed to working in a functional style with immutable data can benefit your thinking even when using common languages. I prefer the static type-inference flavors, e.g. F#, OCaml, or Haskell which is a bit more of a stretch. SICP/Scheme is great or even playing around with Clojure.


What are your goals in life?


Job-wise I'd love to find something more technical and less business/project oriented. I find myself not really caring about the end product but I love focusing on how things work.

I've often been the only one enjoying debugging since it's more of a brain teaser than a business/product focus. Also the build/deploy part of dev interests me a lot.

Also gotta get to a scratch golf handicap, but that's outside scope.


Ever tried following the « from nand to tetris » curriculum ?

I knew a few people (including myself) who dream of taking a few months off just to complete that course.


Funny you should mention it, I'm 3 chapters deep in nand to tetris on coursera. It's a great course.


I really understand, I love tackling the hard problems. I'm working on a fully remote freelance project at the moment and we could really use some decent react.js experience. We're processing large amounts of data in deck.gl and we're really pushing the envelope. Can I contact you somehow?


Hey, sorry but I'll be focusing on learning for now so I won't take new projects for a little while.

There was somewhere up in the thread another user (erdos4d) looking for work I think, so maybe something can happen there.

deck.gl seems like a fun tech, best of luck !


Thanks, I'll send him a message. :)


Maybe you should look into diving deeper into DevOps / IT Ops / AI Ops / ML Ops? And perhaps more jobs around Ops / Network / Sys admin stuff? There's a lot of need for good people who like to debug tricky problems.


Seems to be where I'm headed now. A new world of learning opens !


I'd expand on one of your best skills you already have. The "stack" gets more and more complicated so "full stack" will stop to be a thing in the future.

If you are already good in react, learn more libraries / frameworks in that ecosystem and increase your day rate. You are a frontend architect now.

I'd start with things like nextjs, Gatsby or Redux saga.

You could also go into the devops side of Frontend. Learn the different approaches of deploying / scaling a Frontend with server-side rendering (vercel, digital Ocean, docker...)


Build / Deploy / Scaling is the most interesting part of my job right now, so it makes sense to focus on this part. Thanks !


Any specific resources you recommend for learning react, gatsby, devops and stuff


I'm surprised by a lot of the suggestions (learn C?). I mean sure, everything is interesting, but what is the goal here.

There are many paths, I suspect you could use more exploration to know which ones appeal to you.

From my pov: - general backend people are a dime a dozen, deep front end expertise is harder to find. if you already have front end skills, adding deeper design/UX skills to that would take you to another level completely - on the backend, python unlocks a giant data / ML ecosystem, plus django


Well, my post was kinda generic and more exploratory so I appreciate every answer.

I've read every post and realized I'd like to focus on back-end, specifically server management / devops / security.


Please Contact Me! I have lots of mini projects that need done, you will be contributing to open source projects that will help expand my service offerings. You can reach me through my profile.

Thanks!


I couldn't find some contact or email.


Project Euler is also always nice to learn more things about math.


No shortage of great suggestions here. Lotsa knowledge pouring in!

So I'm there with you although not quite as extensive.

May I suggestion: mobile app? I'm just now trying to get into PWA using vue. I have quite few mobile ideas and trying to pick your fav child is hard ;-) But using a bit of Biz Intel, research is pointing me to certain direction.

Also why not make it side hustle? Check out indiehackers.com (I have no affiliation). Great motivation and inspiration.


I'd suggest having a look at IoT, chances are you already have the skill set to work with IoT and the demand will only grow in the following years.


I was in the same situation. I have done CRUDs for years and finally got longer projects (2 years). I am now facing much more techy problems : recommandation engine, OCR, search engine, simple geographical functions, etc.

It is much more fun, also much more complicated.

My first take would be to learn ElasticSearch, to get a new superpower (it is how it felt to me) and compliment your CRUD expertise. My 2 cents.


Auth and API Security. Lots of apps fall apart when time comes to add login and data persistence!

Also, Jupyter Notebook is really cool, and it would be awesome to have Web Assembly versions that work in the browser. Colab is a nice UX, Binder, Thebelab, all steps in the right direction. Feels like notebook computing with WASM is under explored key infra for AI


Do you often use asynchronous tasks? If not you could use RabbitMQ or Redis (etc) and try to use queues, workers, or pub/sub. Maybe tying that to a websocket.

If you want to expand from PHP you can look up Go or Python. If you want to try something very different and fun but with less prospect for a job try Elixir.

You can also update your skill to the new Vue3.


There's another thread at the moment about touch typing. I think that's only 'meh' useful. Instead, how about spending time on getting all the hotkey combos of your favourite IDE or editor into your muscle memory?

If it has a presentation mode, then also learning how to use any of the features of that would be a nice plus.


> specialize more

With how rapidly the web changes, I would consider specialization a wart on your resume. Web developers have to be generalists. I'd keep doing what you are doing: learning new things.

I'd learn some other back-end language. C#, Java and Rust come to mind. You're very strongly tied to the scripting/dynamic ecosystem.


You have all the skills needed to succeed in a technical level. Maybe look into expanding your expertise in sales, marketing, or running a business.

If that doesn’t float your boat then I suggest getting into woodworking with hand tools.

My point is that you don’t need to spend all your time focused on tech skill development - you might burn out on it.


Starting an independent project or two in an area you haven't played in before might be both fun and useful. I have a somewhat long list of ideas I don't have the time to do if you're looking for inspiration -- feel free to email me if you want 'em (soham at soh dot am).


Web assembly is going to change everything. Rust compiles to web assembly, maybe start there with single page apps as a start.

Smart contracts. Writing a smart contract is pretty easy. They use web front ends to work. Bringing quality UX/UI to crypto may be a skill that’ll open doors for you.


You can consider building SaaS product around your expertise , for eg you can sell APIs. But ofcourse doing market research is another domain. But if you start with an audience, and their problem, you might hit it off. ROI is exponential with a successful SaaS product.


I'm a bit biased since I run a Kubernetes training platform, but even basic Kubernetes knowledge will allow you to deploy all sorts of architectures with a few YAML files without having to patch several external services together


I quit webdev after 3 years and I'm now trying more and more thing in the gaming world. Mostly cpp and opengl. Emscripten(was) and WebGL are very nice to make shiny doodles. So maybe try one of those. Or make simple art with css.


Were you able to get a job or freelance gigs in the gaming field ?


I'm still studying Computing science right now and will start with a master in Game Technology next year. But it is really hard to get a job or do freelance work in the gaming field so no not yet but hopefully soon TM.


Security. It's an in demand field right now, and I just don't see how it will become irrelevant in any time in the future.

React, Angular, etc will all be passe in a few years. Don't base your career on fleeting technologies.


Rust, Terraform, Kubernetes - or at least, that’s my focus and bet for the future


React Native if you don't already know that. Also UX and Product Management. Then just launch some little thing to real users. It will be a thrill ride.

Of course I'm projecting what interests me but that's my advice.


I think you should take a look at Flutter for mobile dev.

https://flutter.dev/ would be a good starting point if that sounds interesting to you.


learn sql. no matter what else you do, sql will be with you sooner or later.

read your favorite DBMS manual end to end. this could amount to thousands of pages; each one is well worth it.

watch leslie lamport's TLA+ videos.


Learn about Test-Driven Development and Software Design. Or learn about Software Design and Test-Driven Development. You'll learn that they are both ends of the same stick.


I'm asking myself the same question. WebAssembly (WASM) looks like something that might have some potential for the future, but adoption will be probably slow/limited.


Learn Kubernetes and/or learn a programming language that has a hot market and static types like Kotlin(if you into more webdev) or Rust(if you into systems programming).


SICP is a great thing to pursue. Pick an area of interest outside webdev and pursue it. Try learning about systems or low-level programming. The field is vast.


System orchestration (docker/kubernetes/aws/...)

This falls a bit under dev-ops and sysadmin but it would unlock your brain to think in different ways.


Discrete Mathematics


Try XgeneCloud : https://github.com/xgenecloud/xgenecloud - its free & open source.

With XgeneCloud,

* You can generate REST/GraphQL APIs instantly on any database (MySQL, PG, MSSQL, SQLite)

* And deploy entire backend into a single Serverless function! (AWS Lambda, GCP CLoud fn, Azure Function Compute)

* Has a built in GUI tool for Database design and API debugging as well.

Idea is you get to pass the boring bits (CRUD et al) and invest time into business parts of application.

(Disclaimer : Im the creator)


Contact me! I have work that needs to be done. You will contribute to open source projects and will help my company expand its services.


I’m also a mostly self-taught freelance webdev, and recently I’ve been learning about Rust which I’ve found to be very interesting.


What kind of projects are you taking on with Rust ?


not op, but there was a post today about how to build single page apps using Rust on the front page: http://www.sheshbabu.com/posts/rust-wasm-yew-single-page-app...


I read that one too with great interest. I’m still only learning and reading, though. I’m hoping someday I’ll be able to use Rust in some professional capacity, but for now it’s just to have fun and play with something new.


Same here. I started going through the excellent guide a few weeks ago.


I think containers, orchestration, nomad. Apps in the cloud decouple storage, security. The real “app” is an ephemeral container


What about WASM?


I started Computer Science last week. Math is awesome, learning Calculus slowly. A decade after normal people do.


How's it going ?

I'll be starting as well, feels like I'm too late to the party. Won't stop me though.


Very few webdevs know it, but they should all learn it, with a gun to their head if necessary: restraint.


Get a Laracasts subscription. They have courses on lots of web dev topics. Not just Laravel/php.


Update your skills, php is hard to market, learn python or rails, that would have high roi


PHP is used a lot in France where I'm based, so that probably differs a bit from the US market.


However, the market will eventually change and it's better to be prepared. Plus with PHP being the mainstream I wouldn't be surprised if you could make better $$$ by going after the (still) relatively niche technologies.


i love these ask HNs...they are always full of such good resources i never knew i needed


Yeah, I never expected so many good answers.


Artistic side - color wheels, photography, design, typography.


Where are you based?


I'm based in France.


algorithms and data structures, prepare for interviews at larger companies that follow more traditional CS interview practices.


Rust, WASM, Vue, Hasura, API Integration


TL;DR: There's probably not an obvious, "learn this and you'll increase your job prospects" technology for you at this point. But, you can also decide to learn almost anything, and because of your years of experience, open up a ton of new doors.

I'm also a self-taught engineer (well, I've done course work now, but only years after starting in the field).

If I'm reading this right, I think you're in a position where there's not an obvious next thing to study, as you've more or less become an expert in CRUD applications.

I think a lot of developers hit this point, especially us self-taught types. When you're making your way in the industry, it's really easy to notice the in-demand skills/technologies that you don't have, and to add them to your toolkit one at a time. It's a nice, linear progression. Then, you reach a point where that approach doesn't work anymore. If you're a 10+ year developer who knows React and Vue and is strong with vanilla JS, adding Angular to your toolbox won't raise your salary or your skills—you could probably pick it up on the fly if you really needed to.

I think at this point, you need a paradigm shift away from "what is the market pulling me to do" and "what do I want to do." It sounds like you want to stay an IC, so that means it's going probably going to be purely technical—so what technology do you find interesting?

For me it was machine learning, and then hardware-level stuff. That's what lead me to take university classes and study higher math/more fundamental CS. There wasn't an obvious pull in that direction from the market—none of my bosses offered me a raise if I became an ML engineer—but I liked it, and because I had years of experience already, becoming proficient in the field opened up an entire new world of opportunities in terms of career and personal life. I wasn't a new grad who studied ML. I was a career developer who'd built businesses, who now had a background in ML. You could apply this same logic to any new field you study, it doesn't even have to be technical. If you got really into design, you'd be a designer with 10 years of development experience. If you got really into sales, a salesperson with 10 years of dev experience is a hot prospect at any company that sells to engineers (in other words, some of the most valuable companies on Earth).

If you want to stay in web development and level up there, I'd recommend following the advice of many on this post. Pick a part of the stack you find interesting, and dig a thousand layers down. Even better, if you find something you think could be done better than the standard tooling does it, build something there.


This is a great reply. Reminds me of this post "How to Become the Best in the World at Something": https://forge.medium.com/how-to-become-the-best-in-the-world...


Thanks for the detailed answer.

I do intend on staying technical for as long as I can.

I'll have to pick something around servers, UNIX, security and performance since those are actually the (seldom used and surely not deep enough) parts of my job I enjoy the most.


Puff up your LinkedIn, Github, etc


Soft skills.


Under the broad heading of soft skills you could learn how to spell and become a better writer. Most technical people aren't good communicators so taking a course in composition and storytelling would put you in better standing compared to most.


That's always a good answer, but I'm not sure how one would go about 'learning' soft skills. Perhaps simply focusing on them is enough to improve.


Why not mentor?


I second that idea. You can learn a lot about your field from trying to make people understand it.


Yes. And do some teaching. Short course?


WebAssembly


any resources you can recommend?


learn the language `webppl`


Svelte !


play with SwiftUI!


Web 3.0


But is it webscale ?




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: