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 !
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'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!
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.
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.
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.
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
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.
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.
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-...
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.
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!
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.
Or something completely orthogonal to computing. Something you enjoy. For fun.
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.
You'll thank me later.
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
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.
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.
Career cheat: If well known open source projects merge your code, that's worth a lot!!111
- Mythical Man-Month
- Design Patterns
- Code Complete
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.
https://www.coursera.org/learn/progfun1
The techniques you learn there will transfer to javascript and make you a better web developer.
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 !
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
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.
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...)
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
Thanks!
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.
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.
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
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.
If it has a presentation mode, then also learning how to use any of the features of that would be a nice plus.
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.
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.
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.
React, Angular, etc will all be passe in a few years. Don't base your career on fleeting technologies.
Of course I'm projecting what interests me but that's my advice.
https://flutter.dev/ would be a good starting point if that sounds interesting to you.
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.
This falls a bit under dev-ops and sysadmin but it would unlock your brain to think in different ways.
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)
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.