13 ms·
Goal-oriented work, creativity and motivation definitely have a difficult relationship. In programming, I learn the most things simply by experimenting at home
by Netcob 5y ago
Goal-oriented work, creativity and motivation definitely have a difficult relationship.
In programming, I learn the most things simply by experimenting at home on my own. I'm thinking about switching jobs, so I wanted to learn some new frameworks and concepts to help with that, and I decided to make my personal projects a bit more "professional". Use continuous integration, focus more on web stuff, build and automatically deploy containers and so on.
Big mistake. I don't want to spend my leisure time fighting with tools, debugging build processes that break all the time, make sense of docker's tagging system and so on. I don't mind programming all day, because I love programming, but I do mind working all day.
So I let it go. I'll come up with my own tools. They won't be great, but I'll have fun making them. And then it'll feel nice using them. And then I'll work on whatever excites me.
Once in a while someone will ask me "how do you know all these things?" and my answer has always been "I don't know that much, I just randomly got interested in this particular topic and decided to play around with it". Over the years/decades, that adds up!
- teraku 5y agoYour cognitive workload is too high. There are three forms of cognitive workload: Intrinsic, External and Germane. Intrinsic is things you just *know*. How to write a class in java, how to write a query in SQL, ... External is stuff you only need occasionally, and need to look up every time: How to deploy to X, how to set up CI/CD, ... Germane is context knowledge. Usually referred to as business knowledge. You want to keep external cognitive load a minimal as possible. You can really dig deployment and stuff, and then this becomes your intrinsic cognitive workload and coding becomes more or less external, but for somebody who just likes to code, it's best to once do a deep dive to deployment logics, write a scaffold and stick with an automated version forever.
- justinclift 5y ago> it's best to ... What are you basing this opinion on? :) --- As an aside, the blog in your profile link ( https://teraku.me https://teraku.me) has an invalid HTTPS cert. Seems to be for a different domain.
- nickthemagicman 5y agoI don't know why you're being devoted, this is interesting.
- Netcob 5y agoI tried that, and at first it almost worked. But that scaffolding just kept breaking. TeamCity doesn't want to execute my unit tests since I've upgraded to .Net 5.0, I still don't get how that docker "latest" tag works, my Ubuntu-TeamCity-Agent refuses to acknowledge it's running in Linux and that it has access to docker. After a while I realized I was wasting precious free time. But I agree about the cognitive load. I have ADHD so in order to qualify as "high functioning" I need to continuously improve my coping strategies when it comes to keeping that load low. I write everything down. My thought process is anchored in long text files with hundreds of indented lists. My programming style is super verbose and perhaps a bit enterprisey, but each class does one thing and I always spend extra effort making sure the things I can re-use work well enough that it's safe to forget how they work. Oddly enough, my reserves are much bigger when it comes to programming. I remember having trouble with some linear algebra homework - it involved a lot of matrix calculations, and my results just didn't make sense, and I couldn't focus long enough. So I programmed it instead, and it worked immediately and solved my homework. I think it was about change of basis, which actually got me side-tracked because I realized the same code could be used for a simple 3D renderer. And that's what got me into computer graphics. What was the topic again?
- yonaguska 5y agoI also programming my linear algebra homework assignments, and then nearly failed the class. Didn't really learn it until I had to use it for more interesting combinatorics. Also adhd, and our coping mechanisms are similar.
- rhn_mk1 5y agoThere is a sweet spot somewhere between the extreme of not using pre-built tools and drowning in them. I've been following a similar path: automation and testing give me certainty and peace of mind when I'm working on bigger teams, so they should also improve my personal projects, right? Well, the difference is that my personal projects are used only by me in limited ways, and I also don't have to worry that someone will break the build when I'm not looking. So the extra work making things super safe would not pay off that much. Except when I feel I'm losing grip on what I'm doing, either from having to cover many use cases, not being experienced, unstable dependencies, or risk of data loss. That's when I set up CI pipelines for my personal projects.
- ryandrake 5y agoEvery third party tool (or library dependency, by the way) is something that will have to be well understood, maintained and fixed when broken. Which is why I try to avoid them for the most part in my personal and work projects. When someone at work says "Hey, lets just use Xyz package I found online! It does just what we want!" you need to ask: Who fixes it when it causes a problem that stops us from shipping? Who does the security audit? What data does it collect, and to where does it send that data? What will adding it do to our software's performance? Who decides when to update it to the next version and verifies compatibility? Is its license compatible with our workflow/software? All of a sudden, people are less excited about that great doodad they found on StackOverflow! I'm always troubled by the cavalier attitude about relying on external tools and library dependencies. Yolo just pull it in! In some cases it might be the right decision, but not always. And, avoiding third party stuff is not always just blind NIH mentality: There are costs to depending on someone else for your project.
- schindlabua 5y agoHah sounds like you described me perfectly. But I do have to say, ever since I'm programming full-time I seem not to be able to just code for fun anymore. I used to program all day long.. and I guess I still do, but now it's for work, and after 8h of work I'm just done, you know? The "stuff I want to look at" list is growing longer and longer and there's no hope of me ever catching up. (I can't imagine how it is for people with kids. How do you get anything done in your private life at all?)
- noisy_boy 5y agoSpeaking as a person with kids, I get into many things but with exceptions of very simple/small stuff, mostly nothing gets done and there are lots of stuff in various stages of incompleteness. It also depends on your level of procrastinating. Doing all these things also has an effect on sleep because I only get time once everyone has gone to bed.
- piva00 5y agoI don't know how old you are and for how long you've been programming but your experience mimics my progression. I started playing with some kind of programming when I was about 9-10, BASIC on a MSX and later HTML that opened up me for web development on ASP 3.0 and PHP at the time. It was a very big hobby when I was young and turned into a career when I was pretty young, about 16. It stayed as a hobby for another 9-10 years but I got to the point where thinking about programming outside of my paid time was exhausting... It helped me tremendously, I would never have a career if I wasn't extremely curious about programming for 15-20 years of my life, I just got to the same stage as you did. There is an evergrowing and endless list of things I want to learn and experience, staying on top of the latest tech on my own free time is just too costly nowadays. I still do it, when I need it for work and during work hours, and all the accumulated experience helps me to figure out things way faster so I don't need to use my free time to catch up. Increasingly rarely I get that curiosity again, to use my free time to study something work-related. When I do it nowadays it's for much larger and abstract concepts such as organisation culture and change, team spirit and building trust and effective communication. I noticed that the past 5 years of my career has been much more about the human and social aspect of work rather than technical ones. And I didn't try to become a manager, tech lead or product owner, it has just attracted me as I think I always got attracted to gaps of efficiency at work. It seems that seeing this human aspect of work brought me closer to more human aspects of life (arts, music, sociology) and a bit away from controlling the machine I learned when I was a kid.
- fuzzy2 5y agoHm, it’s different for me. Since at work I don’t really do the Continuous Integration/Delivery stuff (or anything with “real infrastructure”), I find it very enjoyable to fiddle with it at home. There’s no pressure to accomplish anything and I can just leave it alone for months or even years before coming back to it. There’s a nice side-effect, too: The CI definition documents how to compile the project. I recently dug out an old LaTeX “project” and there was nothing, no Makefile or anything. Had to look up everything again to get it to run (with XeLaTeX and Biber).
- spion 5y agoIt also really depends on what you find cool, there are different ways to look at things. For example if I think of pipelines as these execution graphs that run on their own and make sure your artifacts end up in the right place, then its really fun. CI systems that visualize this make it even more interesting. A little combination of the right personal interests and perspective goes a long way towards building up resilience to deal with the ugly bits.
- Netcob 5y agoI had this interesting experience back in university. We were doing some simple web service project in pairs, and it consisted of a program and some devops stuff. My partner in that project turned out to have skills that exactly complemented my own - he had trouble with the algorithmic stuff that I thought was trivial, yet he easily stitched all the services together by editing some configuration files before I even understood what any of them were for.
- NBJack 5y agoI would caution against trusting your build process definition to hold up to time. It's definitely better than nothing. Even within the last few years of my job, we've had numerous disruptions to our automated builds due to everything from repo changes to version bumps in our fundamental deploy tools. I've got a self-assigned action to take just tomorrow due to how a change in how secrets management has now disrupted our performance testing process available to devs. Anecdotally, it seems more and more that as newer build tools move forward, they rarely seem to prioritize compatibility with existing methods (I'm looking at you, k8s, and your API versioning; "where feasible" turned out to be a loose definition).
- temporama1 5y ago> I'll come up with my own tools. They won't be great, but... They WILL be great. They'll do exactly what YOU need them to do, and nothing else. Software at present is a disaster, partly because we're just piling on complexity all the time, thinking only of the benefits and never of the huge downsides ("fighting with tools").
- Netcob 5y agoThat's true, and personally I'd much rather fight with my own code since I usually 100% understand what it does. In a team of course it would be different - unless I perfectly document my own code, my colleagues would be better off with something they can actually google.
- shawnz 5y agoEveryone who develops a tool did it because they thought their tool would be great, and do exactly what they needed better than everything else that existed previously. Everyone has slightly different needs, so that is exactly what creates the complexity disaster you are talking about. I think that being more willing to re-use the existing work of past developers actually works to reduce this problem.
- sqqqqrly 5y agoI love your "it adds up" comment. I will steal this. It is very true for me as well. Several years ago, I started using make extensively. Not to compile, but to automate. Make understands failing and dependencies. Also, bash and zsh have wonderful completions. I used to write a bash or python script to do this. They often turned into their own projects and were painful to document. A great make example (thanks Aaron) is on YT: Using Terraform, Packer, and Ansible Together": https://youtu.be/pkEezNSFWtA https://youtu.be/pkEezNSFWtA. Aaron automated it all with make. Ya, I know... Make was created in 1976 to compile Fortran. It's old school. I love it. I use it to test my kubernetes CSI driver on 5 versions of k3s with a single make call. That call is the tip of a dependency tree. The leaves end up being a line or three of bash running Ansible, Go, Helm, etc, but could be anything. Documentation is simple because the make dependencies are so easy to follow. They are much of the documentation. The docs are correct because we execute them.
- swat535 5y agoThis is exactly why the more I think about it, the more I just want to git-push-heroku-goodbye and be done with it. I don't care about setting and maintaining AWS instances, docker containers and jenkins. The older I get, the more I realize how precious my time is and now I have very little patience for anyone or anything that wastes it. This is also why I've basically cut off all social medias from my life (except HN occasionally), have always preferred working from home to avoid wasting time in traffic, have cut off people who I don't enjoy spending time with and spend more time with my family instead.
- SaltyBackendGuy 5y agoSame. I completely overbuilt a recent side project and ended up scraping the whole thing because it wastes too much time to maintain it. As much as I love building new projects, having children at home reminds me that time is my only true resource and it's better spent with the kiddos (at least at this stage of my life).
- yowlingcat 5y agoAsking because I feel this way a lot too -- is this the kind of thing that was avoidable (IE if you built it on Rails/Django + Heroku would that have cut down the maintenance), or was there intrinsic complexity to the project that made it unavoidable? More and more, I want to build things that are in the former category if I build them at all outside of work.
- ativzzz 5y agoDepends on what you're building. Rails/django/heroku are web app accelerators. If you are building a web app, then yea they make it super easy and take away a lot of having to think about complex systems, but if you're building anything else not really
- yowlingcat 5y agoAre you sure about that? You get a ton from a batteries included framework, but it doesn't prevent from successfully building a complex system, nor does it preclude you from having to reason through the powerful footguns. The way I'd describe it is that /most/ codebases can fit into what you'd call a "web app" including most codebases that include complex systems -- there are, of course, significant exceptions.
- MeinBlutIstBlau 5y agoQuit normalizing work in your free time for this field. There is no other field that has such a brash concept that we all should work for free to do this. We have a skill. If an employer needs a highly specialized version of it, they better pay to train you to learn it.
- goodpoint 5y ago> I don't want to spend my leisure time fighting with tools, debugging build processes that break all the time, make sense of docker's tagging system Now that CV-driven development is the standard, we are forced to learn new bloated "devops" tools and services every year. This type of knowledge expires very quickly. Also these tools and services do not develop communities: business users drop last-year tools like hot potatoes when a new cheaper or shit^ny one comes along. This hype-fueled corporate-driven culture is not going to end well.
- lumost 5y agoSometimes I wonder if modern corporate culture has adopted soviet style newspeak. Why are we immigrating to the new thing? For the same reasons as we migrated to the old thing. Why is the new thing better? Because it’s just so much better.
- jeremyjh 5y agoBecause there are people for whom "playing" means implementing new devops tools, cluster managers, application servers, etc. In production.
- weehoo 5y agoIf you can convince the higher ups that migrating tooling provides business value, you can do something that requires zero insight or creativity for a few months and at the end of it be promoted for organizing a successful migration despite delivering zero measurable business value. The effects of the migration are gonna be second and higher order effects that are impossible to separate from the rest of the business so you can just claim the tooling was the leverage that let the people doing first order work succeed. Being a tool astronaut lets you claim a portion of everyone else in your orgs success without ever taking a professional risk, since your odds of being called out for an ineffectual change are near zero, since there’s no first order signals. I’m not saying modern tooling is useless; I don’t use ed, cc, and make for my development. But there’s a huge difference between a zero to one tooling effort and an N to N+1 tooling effort. The first one requires figuring out all the implicit/implied/manual parts of the process. The second one is often just turning one set of configuration languages into another.
- ta1234567890 5y agoReminds me of this slime mold video: https://youtu.be/GwKuFREOgmo https://youtu.be/GwKuFREOgmo The mold “operates” in roughly two modes: exploring and exploiting. It explores to find the food and then it exploits the best paths to the food to consume it. I feel our minds work in a similar way, we explore when learning new stuff and then we exploit when using what we learned to accomplish something. Probably most of the work that majority of people do is mostly exploiting previously learned stuff, with some limited exploration sprinkled into it every now and then.
- localhost 5y agoI can't agree more! I make the same argument, but much less eloquently than you did "I just randomly got interested in this particular topic and decided to play aorund with it". Using the same motivation: "let's play with things and see what I can figure out", I created a video [1] where I figure out what I need to do to create a silly version of the cat command that prints text out upside-down. I did it for a bunch of reasons: figuring out how to replace system commands, learning a bit more about Unicode, trying out our C extension for VS Code, learning the process for building YouTube video (which was a very deep rabbit hole) ... all to produce a single video. It was fun, scratched an itch that I've had for a while that I'll continue to work on. [1] https://www.youtube.com/watch?v=OJ2ivP2llFs https://www.youtube.com/watch?v=OJ2ivP2llFs
- shawnz 5y agoIs this really a matter of tooling versus programming, or is it a matter of wanting to create rather than wanting to re-use the work of others? Even purely in code, you always (EDIT: usually) have the choice of implementing a solution yourself or finding the work of someone else, packaged into a library, which solves the problem for you. Implementing the solution yourself may be the most satisfying way to scratch that instantaneous creative itch. But does it create the end result which you can be most proud of or satisfied with?
- klyrs 5y ago> Even purely in code, you always have the choice of implementing a solution yourself or finding the work of someone else, packaged into a library, which solves the problem for you. In my experience, this isn't remotely true, especially if you're constrained to use a particular language and don't want to pay the overhead of wrapping another language
- Balgair 5y ago> Once in a while someone will ask me "how do you know all these things?" and my answer has always been "I don't know that much, I just randomly got interested in this particular topic and decided to play around with it". Over the years/decades, that adds up! "Don't become a well-rounded person. Well-rounded people are smooth and dull. Become a throughly spiky person" -Bruce Sterling
- bredren 5y agoI had the opposite happen. I had been building servers for my (largely Django-based) projects using long txt files from old digital ocean tutorials I had customized.[1] I fought docker and all of that but had some time last year between gigs and spent a few weeks examining the state of things and experimenting. The most influential of works were recent guides by Michael Herman. [2] In the process I learned to set up not fully reproducible server setups but branch and commit message-specific CI/CD workflows using Github Actions. It turns out it is like most things, hard and complicated until you know and have living samples and then it seems relatively straightforward and efficient. GA is still fairly young and there is still opportunity to create and share flourishes of art in devops there. [1] https://www.digitalocean.com/community/tutorials/how-to-set-up-django-with-postgres-nginx-and-gunicorn-on-ubuntu-16-04 https://www.digitalocean.com/community/tutorials/how-to-set-... [2] https://testdriven.io/blog/deploying-django-to-digitalocean-with-docker-and-github-actions/ https://testdriven.io/blog/deploying-django-to-digitalocean-...
- WrtCdEvrydy 5y ago> Big mistake. I don't want to spend my leisure time fighting with tools, debugging build processes that break all the time, make sense of docker's tagging system and so on. I don't mind programming all day, because I love programming, but I do mind working all day. Yeah, I've basically moved on from anything that isn't Caprover + Portainer. Fuck the rest.
- void_mint 5y agoFor me, true programming joy comes from not having to look at docs. To be able to just write code for long periods of time, without running into something weird happening with a library or tool is the "zen" feeling that I hear lots of others talk about. At work, and in this domain: > I wanted to learn some new frameworks and concepts to help with that, and I decided to make my personal projects a bit more "professional". Use continuous integration, focus more on web stuff, build and automatically deploy containers and so on. It's all docs. It's all "This thing was supposed to happen but ____ didn't do what I expected". Fighting with tools and configuration and triggers and stuff like that is the opposite of zen.
- utxaa 5y agothis is why if you don't enjoy leet puzzles, you don't learn anything, or can't even do them.
- deleted 5y ago[deleted]
- mancerayder 5y agoI'm struggling with this. Manager managing more and more people. Old school on premmy turned AWS and Kubernetes while I was already manager a few years ago, making it hard to learn first principles of k8s and Docker. Now here I sit, Sunday, staring at a terminal window to force myself to set up a ruby on rails app on Docker so I can shove it into a EKS setup I will set up with Terraform. Could I do this at work? Yes. Except No. In the hours of 'free time' between meetings and other work, I feel too mentally foggy to play and learn new things. Please.Help.Me. I think I just need a vacation.