<i>> I also take a lot of photographs, and I could use a tagging scheme that isn't tied to a do-everything program like Adobe Lightroom. That's simple enough that I could create a minimal solution in an afternoon.</i><p>Having done exactly that (tagging and collating app for images), I can report that it is likely to take somewhat longer than “an afternoon.”<p>The Programmer’s Credo:<p><i>We do what we do; not because it is easy, but because we thought it would be easy.</i>
Good advice to advance your career, but I'd say there's nothing wrong with being passionate/excited about the craft and not the result. Newbies should just be aware that this can affect their career (they will have better job security as they won't be picky about the domain, but they will probably earn less as they won't ever be domain experts).<p>There are endless examples from other "industries".
There are people that love painting, but never care who sees their work. They love the creative process.
There are people that love carpentry, but hate doing utilitarian furniture that sells well. They love how zen manual labor can be and that the result is physical.<p>It's not "wrong-way-aroundness", it's just a different goal.
I noticed that whenever something like this gets posted (in a nutshell: the advice is to be practical in what you work on) - a common response is that not everything must have utility, you can enjoy things just for their own sake.<p>This is true, but the reason this is <i>advice</i> (ie, suggestions of the best course of action) is that if you can get your enjoyment to line up with what's useful, your life gets better than if you keep it separate.<p>Like, if you hate your job and come home to work on something fun but impractical, you still hate your job where you spend most of your day. If you can "tune" your mind to enjoy something practical, potentially that thing can grow and you can do it full time (ie also enjoy your job)<p>Another example is people who taught themselves to love working out or studying. They win twice - from doing something they enjoy and from engaging in something that bears fruit for themselves.
Another way to say this: To develop in short cycles, you have to interact frequently with the actual user of the program. The simplest solution to this is to choose a program where the developer is also the user.
I do think it overlooks the idea that some people enjoy the process of programming, while others enjoy the solved problem. If I do a crossword puzzle or Sudoku, I don't frame it, don't care, I enjoyed doing it.<p>Now one of his points is that a program by someone who does not use it that enjoys creating it will be inferior to someone who uses it and wants the solution.<p>This is true, sometimes, but other times, what happens is the solution is over fitted to the person who wants it.<p>Also, often software that is clunky because the person is not interested in the result, yes, but it is better than software that does not exist.
> Would you trust a music notation program developed by a non-musician? A Photoshop clone written by someone who has never used Photoshop professionally?<p>Wouldn't a fresh look at things, essentially a "clean room" implementation offer the possibility of a novel approach to a thing or two, as opposed to making the same tool, just different?<p>But overall the idea of matching one's ambitions (project scope) to one's abilities (including domain knowledge) is a good one.<p>Not doing that is why we get things like Kickstarter campaigns for MMO games by novice developers, which never go anywhere as projects. Of course, it's also useful to fail and be humbled with learning projects, especially when someone's money is NOT on the line. Maybe more people should explore developing something like microservices in non-prod projects to better learn their advantages and disadvantages and so on.
I somehow get paid to be an aimless and excited programmer. I work in developer relations for a data company. Even though my title says, "engineer", I don't do product building.<p>I don't have any exact direction honestly. We have a data product and I do random things as long as it improves the developer experience.<p>One month I am writing a technical blog for beginners on using the API using Csharp, before that it was writing a 15 page technical document on Snowflake, yesterday I made some demo GIFs using a CSVgrep for a product launch.<p>It is chaotic and I really don't have an exact year-long focus when it comes to programming commitment. The only thing that is true is that the API/database we provide, which is being used by real programmers from different backgrounds. The DevRel role demands someone to be aimless and excited. You have to know enough about developers to help them get started, but you are not required to carry them to the finish line.<p>"Being aimless and always excited" as personality trait largely helps me to do a great a job. I do have to report to my manager, and I am a part of a team, so, I have to maintain a framework.<p>Although time to time, I suffer from being too aimless and too excited, and like a golden retriever I have to be told to calm down. Sometimes I have to remind myself it is a job.
I don't know if these advice still applies en 2023, mostly because at least on the "web" side of development there are so many solutions/frameworks/libraries releasing that look exciting but there aren't enough problems to be solved solely through software development in our daily lives.<p>Till this day i don't know were can i fit svelte/solidjs/remix in my current development environment without introducing more problems than solving issues but there is a crowd of young developers that learn from bootcamps these tools and start solving all the problems with the same tech (like why is everyone using nextjs for static content like devdocs?).<p>Sometimes is good to ask for problems to be solved, its more satisfying and challenging helping someone else rather than making another guitar mixer software that is a problem solved inside another software (ableton), also helps a lot to develop your professional skills because at the workplace you won't be the one using the software and you learn a lot of how people use your/the software.
This is both good advice, and completely useless advice.<p>> Stop and think about all of your personal interests and solve a simple problem related to one of them<p>As someone who has spent many years as an "aimless excited programmer", I would like to point out <i>emphatically</i>, that this idea did, in fact, occur to me.<p>So I thought about it. I asked myself that question.<p>But then what? I didn't <i>have</i> unsolved problems lingering in other hobbies. If I did, I would not have been aimless! This is <i>specifically</i> the task a person in this position is asking for help on.<p>Then there were the rare times that I <i>did</i> have unsolved problems, but they were always way too big to practice on.<p>Programming has two fundamental natures: abstraction and implementation. You can become an expert in the abstract, like a mathematician, but that doesn't make you an engineer.<p>Just like mathematicians manage to keep learning math without engineering, we can keep learning programming without ever <i>programming</i>. It's a very unsatisfying position to be in.
Now go back and read Linus Torvalds' first note on writing Linux.[1]<p>[1] <a href="https://fossbytes.com/linus-torvaldss-famous-email-first-linux-announcement" rel="nofollow">https://fossbytes.com/linus-torvaldss-famous-email-first-lin...</a>
I have faced this myself, and the aimless excitement can create a lot of frustration in new programmers. Programming is a unique tool in the sense that it has the ability to glaringly show the programmer's lack (or wealth) of vision.
That's a fine advice for people with hobbies that use technology. For most of my activities outside of work, I've found that Excel is about as much software as I need.
Good advice.<p>RE key 1 ("keep it simple"), I'd like to add to extend this to tools. You don't need to learn tmux, vim, docker, kubernetes, CI/CD etc. in order to create useful things. Just use whatever you're comfortable with at the moment (including the mouse!), and don't ever feel that "real programmers" use some fancy and/or nerdy tools.
The article really seems to be attacking a bit of a straw man - for sure technology-first rather than utility-first isn't the right approach if you're looking to create products, but IMO neither of the examples he leads with are really falling into that trap.<p>The "suggest a large project I can do in language X" seems to be more about asking for something larger where the given language might be a good choice rather than asking for product ideas. The person asking the question would seem to just be wanting to get some more in-depth/real-world experience with the language they've just learnt and are excited about.<p>The "suggest a Windows program you'd like to see available on Linux" seems entirely reasonable from POV of market/utility-first. Maybe the newbie's enthusiasm isn't going to be enough to succeed, but no harm in trying to develop something that people actually want rather than coming up with your own toy project.
such a useful insight - that everyone knows but don't really use.
it's the same pit a lot of us engineers fall into - tryin' to solve a problem
in a domain we don't have much hands on experience with.
thinking just because there's a workable solution that's achievable via code.<p>then we write postmortems of why our startup, venture, product didn't work - while still ignoring the fact about domain knowledge.<p>which in terms of b2b software where there's a massive demand. few engineers including me - know domain experts that are not engineers.