20 ms·
What eight years of side projects have taught me (2019)
- codr7 7y agoSame here, though I've been chugging along for 34 years. Used to write all kinds of software to try out new languages/ideas, but that all changed once I went down the rabbit hole of designing my own language. Since then, I've mostly been trying out different host languages, features and implementation techniques. I figure once I get to a point where the language is good enough, I'll go back to writing all kinds of software but in my own language. It really doesn't matter that much, the journey is the goal, you do whatever it takes to stay motivated and keep learning. https://github.com/codr7/gfoo https://github.com/codr7/gfoo
- eric_khun 7y agoI completely can relate to your experiences (wrote a post about side projects [1]). Strongly agree with "Programming in a void is worthless". Learning a new language shouldn't be the purpose to start a new project, it should just be a tool to get a side project going. And the goal of the side project will make you force you to use it, so it's a great way to learn. It can sometimes be a struggle to learn how to achieve X or Y with that tool, I now tend to use the language I know (that I've learned with previous side project) to ship a new side projects faster. [1] https://erickhun.com/posts/why-you-should-have-a-side-project/ https://erickhun.com/posts/why-you-should-have-a-side-projec...
- alithejumbo 7y agoIn my experience "Programming in a void is worthless" was the main factor to put the language aside and lose interest. Only learning for projects drove me all along through Node, Golang, C# and counting.
- bcrosby95 7y agoI went pretty wide on languages too. I kinda wish I spent that time learning more useful things though. It's certainly nice to be exposed to different language concepts, but I think there's too much conceptual overlap between e.g. C# and Golang for there to be that much benefit from it. If I had to pick languages that changed my thinking the most, they would probably be: Haskell, Erlang, Clojure, Prolog, and R. Unique languages like Erlang/Elixir and Prolog can be "10x" languages - they were written for specific purposes and if your problem fits that purpose it will be much easier to solve than in most other languages.
- austincheney 7y agoWhat my years of side projects have taught me: * At work its better to hurry than get anything done. Regardless of language if you work for a company of greater than 1000 people there is a certain nearly identical way of doing things. This way of doing things is based upon a combination user platform, quantity of developers on the market with a particular skill, and a need to pretend to be busy even when you don't actually accomplish anything. In most of my experience the platform was the web and the language of choice was Java (even though Java is not a web technology). When you are working on side projects there are only two goals: don't waste your own time and produce something of value. Nothing else matters. And so you learn to become very productive and extremely focused on what you ship to production, because you would rather be playing games or drinking a beer than pretending to be busy. The corporate world doesn't work like this. Everybody is paid a salary exchange for 45 hours of your life each week and your assignments are generally governed by an agile sprint cycle, so there is absolutely no motivation to be productive. Maybe if you work twice as hard your bonus will be 5-10% bigger. Maybe if you deliver code that is perfect in that it never requires maintenance and never churns defects you can spend more time reading about foreign places on Wikipedia. Frustration sets in after watching the corporate approach continuously releasing defective code into production because its important to hurry instead of write things down or write the code correctly the first time. You could always suggest a better way of doing things, but since there is no motivation to do things better all you are really accomplishing is frustrating other people. * At work don't reinvent the wheel (if somebody/something is capable of doing your job then let them do your job) When you are working on side projects there is nobody there to do the heavy lifting for you. You can figure it out or it simply isn't important enough to get done. It's the same way with risks and product performance. People who haven't spent time on personal projects or with equity at a start up have no motivation to try harder. That is why there are giant frameworks and a couple 1000 open source packages in your corporate application to solve simple common problems developers are unwilling to solve themselves. Nobody working on a public personal project will build around something like the 1000 ton hammer of the gods that is Angular or Sprint MVC, but you will certainly find these in public facing enterprise applications where developers have no care about punishing their users in exchange for easy. * You are more productive not doing work A tremendous part of writing software is the cognitive thinking that occurs away from the keyboard. This could be planning, brainstorming a new feature, reflecting on a past feature, or putting things together in a new way to envision defects or refactoring opportunities. That said, its more valuable to work really hard to accomplish a feature or solve for a defect and then back off from the computer. You haven't stopped thinking about the application, but now you are thinking about the experience or new ways of doing things that you would never think about purely looking at the code. In the corporate world you are extremely lucky to find documentation much less anything like planning or feature engagement from the developers.
- mmahemoff 7y agoI agree you should have a real problem to solve when learning a new language. However, I'd temper expectations about the outcome. Generally I find side projects are either about learning a new technology/language or making something that should exist, but not both. It's important to be clear which is the primary objective. If the objective is to make something, pick the most familiar language and libraries, bang it out, and ship it. If the objective is to learn something, for sure pick a real project to focus your efforts, but understand it will take longer and the end result probably won't be amazing, though hopefully you'll learn a lot in the process.
- platz 7y agoI put all my notes and bookmarks in my self-hosted bookmarking site https://github.com/jonschoning/espial https://github.com/jonschoning/espial . I definitely agree with the author that the combo of tags, search, the feed, and notes is very effective technique that I sure every day.
- cies 7y agoIn Haskell and Elm! Nice project. I did not see any code "shared" (or Elm generated from the Haskell code) to enforce type-safety across the network barrier. Afaik there are a few projects that could help with this. Not saying you need this (small project, easy to manage) but it's very sweet to have type safety from db, through BE app layer, though the wire format, all the way to the FE model code.
- codingbbq 7y agoI can relate to the post, having just started for couple of months now, learning to write code for your self is satisfying. I have followed several youtube videos to learn programming language, but the fruitful results only come from working on side projects/challenges etc. The only way to account my progress is through github commits. I love the color green. ;) Would love to get feedback on my blog http://codingbbq.github.io http://codingbbq.github.io. Cheers.
- shrimp_emoji 7y ago>The nice thing about the Go/Lua journal is that it’s far more flexible than the C# version, due to being able to write pages in Lua. Which means I’ll be able to To what?!?! D:
- yumaikas 7y agoI don't know exactly what I was thinking when I wrote the article, but, here's the best fix I think I can add (article edited to include it): > Which means I’ll be able to use it for more things, and hopefully get that tight feedback loop back in place.
- inapis 7y agoAs someone, whose side project[1] graduated into a full-time company, I agree with a lot of stuff in this post - > Lesson 0: Programming in a void is worthless 100% true. If you are trying to learn a language without a goal, you'll probably never graduate from tutorials. Imposing your own requirements/boundaries, just makes the learning part more engrossing and you'll make connections which you won't otherwise. Iterating as fast as possible is worthwile itself. If you want to grow as a programmer even more, try to convert that side project into a paid one. It definitely changes your view of the world. As programmers, we want to see elegance in code but real life is messy. We want to separate the world of programming from the human life and sometimes for good reason. You might find satisfaction in writing pure code (and that's great) but there's an opposite world too which will humble the strong opinions within you. Haggling about microservices vs monoliths seems trivial in the grand scheme of things (the customer doesn't care!). I still debate about this with fellow devs but at the end of the day, I really don't get stressed about it. For me, programming is pretty much only about building solutions to existing problems which improves my or others lives. Everything else is just an opinion which will not be considered until its time is due. > Lesson 2: Organizing my thoughts is important, but tricky to figure out Agree. Especially difficult if the software doesn't structure the knowledge in the same way as we think. As a dev, I have never been satisfied with any specific solution. But don't fret honestly. It's unlikely that any given piece of software will work for all your cases. Always take the context into consideration. Plenty of times I work on paper if what I'm thinking doesn't go into a specific tool. Don't try to fit yourself into a box when your mind itself can't. That said, a mindmap (big picture) + a task manager (big picture broken down into specific tasks) + a note taking app (learnings + thoughts derived from completing specific tasks) covers most of my bases. For publicly available information, I store it in a tool of my own making[1] [1] https://getliste.com https://getliste.com
- ssamkough 7y agoLiterally was thinking about building something to save articles. Liste looks beautiful, excited to see it in action.
- eandre 7y agoListe looks great! I've been looking around for a better tool to aid in note-taking after all the posts around this space over the last few weeks. Will keep an eye on it and good luck with the launch. How did you decide to start a company around the idea before launch?
- freshfey 7y agoFor those who feel like a side project needs to be successful or reach a certain amount of revenue/lines of code/users to be successful in your eyes: Don't feel pressured. In my career (granted not a long one, but made it to C-Level in a startup after about 5-7 years) I've always used them to show my interest and learning skill to do something. It didn't matter whether it had 1 user or 1 million, employers were always very impressed and it always gives you an advantage during interviewing. Most of those have also been with very little or no code at all. I'm normally prioritising people with side projects in the recruiting process vs. people who only did school -> work
- hackerbabz 7y agoAre unfinished projects worth anything to an prospective employer? I have plenty of projects I attempted before getting busy with real life. Should I show those when asked for a Github?
- 74ls00 7y agoI do - assuming there’s actually something to show off then I put it up. I have static websites only half full of content, repositories with just an assortment of scripts and configs, libraries that are just enough to meet the use case, etc
- wastedhours 7y ago> unfinished projects Depends on the definition of "unfinished" - it's good to create something that's workable to some state (or at least demo something). If you're using a repo of unrunnable code as an example of your skills, you probably need to have a robust explanation of what needs to be done to get it working. However, I doubt lots of examples of half-complete projects will reflect too well, and might be more of a hindrance ("doesn't follow through, constantly jumping from thing to thing...") than a benefit. Pick one you're proud of and run with it, even if it's just a "this is the state, this is what I'd do to get it running...".
- james_s_tayler 7y ago
- eandre 7y agoThis is good advice. I've been working on a side project for almost a year now [1]. It's a constant struggle with the pressure to reach a certain amount of users or impact, when at the end of the day I've just been building it to scratch my own itch. This article is a helpful reminder of that. [1] https://encore.dev https://encore.dev
- Insanity 7y agoSide projects are great. Not just for learning technology, but also for playing around with technology you already know. It can be fun to built something without the 'overhead' of Sprints, standups, team meetings, design documents,.. :)
- ThalesX 7y agoI love it how when a new situation comes up at work that I have encountered in my side projects, I can come up with some approaches, strengths and weaknesses pretty fast. It makes me look like I'm a lot more knowledgeable than I am.
- Insanity 7y agoWell but actually you are that knowledgeable - you just gained the knowledge through experience outside of work. But you're right, it happened to me a few times as well and people assume you "just know". :P
- gonzo41 7y agoYeah i totally agree with this, It's also great to reduce the complexity of what you're working on to get to the learning. I've been writing some java stuff that doesn't use magic annotations and guess what, java's got fun again.
- embit 7y agoCould not agree more. I kept playing with my side project of news aggregation [1] for almost three years and used only for my own consumption. Then few friends wanted to also use the site and then it just organically grew. And this project still is a side project although lot more people use it. [1] https://embit.ca https://embit.ca
- harel 7y agoVery true. I followed the same path, and a side project was always the way to learn something new. Sometimes those side projects become full on ventures as well. Added bonus. I also very well remember my joy after I "invented" the AMQ, only to later find out about ActiveMQ, RabbitMQ etc. (which didn't diminish that "proud" feeling)
- dillonmckay 7y agoI think that is some of the best validation, to know that your solution is not to different than the ‘standard’, without having any prior knowledge of its existence. Good work!
- chapliboy 7y agoI am stuck in the same loop of trying to find the best way to organise my thoughts. My best attempt was using Dropbox Paper. They have a great editing/writing experience, but eventually it got to a stage where the page load times took too long. I'm currently trying out vimwiki. Let's see how that goes.
- MonarchofSouls 7y agoCheck out Notion (https://www.notion.so/product https://www.notion.so/product), it's really smooth to use and loads fast
- mercer 7y agoI've let go of my addiction to finding the best tool and settled on Emacs+Org-Mode (specifically with Spacemacs so I can use Vim keybindings). Over the years I've tried so many tools, languages, workflows, and the only ones that stuck were the ones that were boring but timeless. I've not just been gravitating toward OrgMode for all my note keeping, but I've also gotten more and more into bash for much of my stuff. There are downsides to that, of course. It's frustrating that I'm mostly limited to text-only things, for example. But it feels like any investment into bash/emacs+orgmode/emacs+tramp/emacs+? offers so much more than becoming reliant on app number <x> that quite possibly disappears or stagnates.
- temo4ka 7y ago> bash/emacs+orgmode/emacs+tramp/emacs+? You wanted to say "Magit" in the last one :-) Why do you say you're limited to text-only things? Org supports links, images, code blocks, spreadsheet-like tables and such. For me the experience of migrating to Emacs+Org was more of a liberating type.
- mercer 7y agoAh yes, Magit is still on my list of Emacs things to learn :).
- rognjen 7y ago
- GuB-42 7y ago> Lesson 3: Search is a great tool for debugging and flexible organization "Give me modularity or give me grep!" That saying was intended to showcase the importance of modularity, with the idea that you shouldn't need to grep good code. But my personal experience is that if you have to choose, grep wins, no contest.
- jasoneckert 7y agoExcellent advice. And starting with #0 adds street cred.
- agumonkey 7y ago> Lesson 0: Programming in a void is worthless I wouldn't say worthless, but there's a world of difference whenever you have a practical use (or someone else's use). It forces your brain to focus and go broader at the same time.
- Blaiz0r 7y agoI'm one of these people that doesn't have much time less the energy to focus on side projects when I'm home from work, that said my career has been changing over the last few years and at times I rarely have any code to write at work. These are the times when I really find a yearning to write something and I want to put a bit of time into a side project like learning Godot, or writing a desktop GUI based program with Rust. I just need to be doing something different with my day job to have the inspiration and energy to code when I get home, unfortunately at the moment I'm coding at work again, and when I get home I will stare blankly at the screen infront of me if I try and write more code, even in a different language.
- yumaikas 7y ago(author here) I definitely recognize that not everyone has the energy to code at home after a day of coding at work. Often, I don't either. Side projects are a varying thing for me. I do try to make sure what I do code gets documented in some fashion, however.
- city41 7y agoI've never had a side project lead to anything profitable in the monetary sense, but they've been very helpful in me getting great jobs. I'm currently taking a side project and going to attempt to make a business out of it. As far as building it goes, it's basically the culmination of about 5 other side projects I did over the past couple years. So I've been able to build the MVP extremely quickly. I totally get and appreciate the "don't code outside of work, have a life", but at least for me, side projects have been very valuable.
- markus_zhang 7y agoI like your blog's style and color. Do you have a blog dedicated to building it? Thanks
- yumaikas 7y agoI don't at the moment, though I could write one up at some point. The short answer, though, is that I knew I wanted green in the color scheme (due to having grown up in the tropics), and I liked how James Hague did his blog https://prog21.dadgum.com/ https://prog21.dadgum.com/ The rest was just iterating on that.
- markus_zhang 7y agoThanks, I really enjoyed the theme.
- allochthon 7y agoSlightly related. Here is a side project I wrote to keep track of the tons of information I've read about or _might want_ to read about one day, which kind of overlaps with the journal app that was described: https://digraph.app/ https://digraph.app/. Information is different than knowledge, and part of the challenge of acquiring knowledge is being able to get back to information you know you've seen in the past if it seems relevant to something in front of you right now.
- bluedino 7y ago>> Most times, when I’ve tried to learn a programming technology without a concrete goal to get something built, it is hard for me to maintain interest I feel the same way. However, I take it one step further. I lose interest after I create the one core feature that drew me to the project. I've made shoot em ups before, but I wanted to do one with enemies that flew in like Galaga. After I replicated the first few patterns, I lost interest. You couldn't even shoot the enemies, but I already knew how to do that.