For most people, the premise of this question is wrong. Procrastination, when you don't obviously have a lot of available time and effort, is a symptom that most of your creative energies are already spent elsewhere and are unavailable for other high-energy pursuits. I commend the effort to organizing your remaining free time to produce something of societal value, but for most people this is an exercise that will in the long run lead to burnout. Your mind is already subconsciously telling you this.
I know some people who have energy levels that allow them to sustainably burn the candle at both ends, but they are a small minority. I am quite envious of this group; they appear to have a big leg up in accomplishing great things, but there appears to be a component of either genetics or upbringing that leaves only a small portion of people with this capability.
If you are not in this minority and you strongly desire to produce more creative output outside of your full-time job, there are two options: You can set small goals, e.g. spending 3-5 hours a week of dedicated time towards your pursuit, or putting everything else in your life on pause for a year or two while you go at it with all your effort. The latter course of action will likely not be sustainable, and you have to listen to your mind and body when it's had enough of it.
My preferred choice would be to get a job that pays enough to sustain your lifestyle but has much smaller hours (e.g. 60% or 40% of a full-time position), if this is at all possible. Most places, sadly, it isn't an option. If you can organize this, you free up a significant portion of your creative energy, which can then be used for other ambitious goals.
Since you want to do more, I know this sounds crazy. But when I set up a personal kanban system, it really changed my life. You establish a backlog of what you want to do. Then you limit the amount of work in process (WIP). That gives you a very small number of open tasks to switch between, which means you end up increasing your focus and being forced to finish things. (Or at least clearly admit that you're quitting a thing.)
This process is, honestly, pretty unpleasant at first. Being a passive consumer pays off right now. There's always a new article, a new tweet. When you're bored, you just skip ahead. Real work is frustrating and pays off very slowly. So you're going to spend months just breaking yourself of your quick-entertainment habits and learning to put up with the frustration of longer scale.
If you really struggle, consider trying out the pomodoro system, which involves fixed periods of focus with breaks. E.g., 25 minutes of work with 5 minutes of break. When I'm feeling really resistant to production and just want to fuck around on the Internet, I'll tell myself, "Ok, one pomodoro of work on the project." I'll set my countdown timer and just fucking do the work for 25 minutes, no matter how much I don't want to. Often after that, I get into it and it's fine. But that first wall of resistance can be brutal.
The other thing that really helped me is taking up running. Pick a race, like a 5K. Train for it and do it. Then pick another race. The main trick to running successfully is not giving up. You learn to put one goddamn foot in front of another. Some days it's a joy and some days you hate it, but that ends up not mattering so much. You slowly learn that your feelings are just these things your brain does. You can notice them without having to obey them.
I ask because you need to:
A. build an environment conducive to producing.
B. practice discipline.
Like you, I had some half-baked blogs and projects that were doomed for failure. After way too much wasted time it was obvious that I wasn't living a lifestyle congruent with my goals. No successful person ever prioritized Facebook over their project. I was lying to myself and had to snap out of it.
So I began applying a version of the Broken windows theory* - which argues that if you prevent small crimes it discourages large crimes - to my life. (In this case the smaller crimes were procrastination and the larger crime was not getting my shit together like I know I ought to).
The rules were simple:
1. Everything I did had to align with my goal to produce. I got a faster laptop, dual screens (this makes a difference, trust me), began sleeping well and eating well, rationed consuming to 2 hours a day, stopped drinking (hangovers are dumb...for now at least).
2. Apply discipline everywhere. I made my bed first thing each morning, the apartment was always spotless, I worked out every day. Even began doing stuff like not using auto-correct on Chrome - fight your lazy brain and spell the word correctly dammit. The idea was to practice discipline as much as possible so as to train it like a muscle.
End result: I learned how to code, built a product, quit my job and am now at 500 customers.
So you can do it. It's just going to cost you - dates, meetups with friends, a slight drop in Facebook-notification-induced-dopamine. But, I assure you, the joy from creating something that people enjoy eclipses all of that.
This approach is geared more for an all in lifestyle change. If you just want to be a better blogger, even a fraction of the above will do.
Worse than the fear of commitment is the tinge of regret. Took almost a decade to figure that one out.
Imagine starting work on these things right now and notice how you feel. Investigate from there.
Or, ignore the feeling, and go work on your dreams anyway :)
Also, an important thing to realize is that everyone is bad at stuff in the beginning. In the words of Jake the Dog, "Suckin at something is the first step towards being sorta good at something!"
Or (can't remember where i got this) "Every artist has 10,000 shitty drawings in them, it's best to get them out as quickly as possible."
Deliberately making something bad (because it will probably end up sorta bad at first, whether you want it or not) can help you overcome the delusion of "it has to be perfect or people will judge me!"
Aim to fail because failure is an essential part to success. You keep sucking until one day you wake up and realize things are going really well. You have to make it to that day though. The only real failure is giving up.
We have a glut of online content. For every tweet that illuminates, there are 9 that constitute meaningless chatter, background noise that serves only to obfuscate the good stuff.
The freedom that the internet has given people to communicate is a wonderful and empowering thing, but the idea that we must 'produce' something to be contributing to our world is just wrong, in my opinion.
If you have free time, why not do some volunteer work in your community? Most countries have, for example, charities that help connect lonely elderly people with others to meet, say, for coffee once a week. I would say that represents a contribution of significant value.
My most unproductive period was when I was trying to do too much, all sorts of things, with insane deadlines. It really had an opposite effect on me wherein I started procrastinating a lot and then felt guilty for wasting another day. Weird part was that I wasn't even having fun with my time. It was just a weird state where I was working without actually accomplishing anything.
Anyway, I got my mojo back when I just said fuck it and said goodbye to those imaginary deadlines and started doing the so called time wasters like watching Netflix, reddit, hn, etc 100% guilt free. Instantly without the pressure and guilt, the quality of work and more importantly stuff started getting done again. It may be a unique case but try it for a few days. Maybe it'll work for you too!
~~Marianne Williamson, A Return To Love
Do it :)
Maybe easier for me to say since I don't like social media much, but really the mindset is wrong.
There is a HUGE difference between using FB, YouTube, Twitter, etc, for product promotion -vs- consuming content. You are sort of consuming, but the mindset and results are very different.
>> Another thing that is holding me back I think is the fear of commitement. I have a partially ready youtube channel, with two videos, not listed. I tell myself that I'll open the videos to the public and then start realising videos on a weekly schedule but the commitement seems like a such a burden on me that I don't think I'll be able to keep up.
This is wrong as well. You are confusing "commitment" with "consistency" or rather, attempting to reach some undefined metric of consistency. The only "consistent" thing you have is either "do it" or "don't do it." It doesn't matter if you post once a week, once a month, or every day. Just get started.
The first step is always the hardest step, and this goes for your project, blog, YT channel, whatever. Just doing it once is enough to get those first steps past your fear.
And don't confuse myth with reality. Every overnight success story took 10+ years to write, and the back-story is a graveyard of failed ideas and plans.
You're giving yourself not just too much, but the wrong kind of pressure.
Find something that's more fun and interesting to you than browsing Facebook, something you'd rather be doing, and something that scratches an itch or helps you learn something you want to know.
Don't do it for social value, don't expect to give more than you take, and don't commit to it. Do something for yourself, and those things will happen naturally as a byproduct when you find the right thing that you care about so much more than Instagram that you can't bring yourself to browse Instgram.
Finding the thing is your job at this point, so don't stick to one of the things you listed until you try them all and try many other things too. Try boating, or woodworking, or exercise, or eating, or volunteering at the homeless shelter. (If you want a blog or vlog, you need stories to write/video about, after all.) Find something you enjoy before you even think about commitment.
There's almost nobody writing blogs or open source software or posting videos to YouTube that are worrying about their contribution to society -- they are doing it because they love it, they like participating in the activity for reasons that primarily benefit them -- and only occasionally and secondarily do they benefit others -- and that's okay!
If you have good intentions and find yourself in good company, you should have nothing to fear. It really is a matter of "just do it". Thought without the possibility of action is imprisonment.
Tldr; Think of myself as a product, and try to use a sort of agile development style to improve myself. I assign myself "sprints" (one or two at a time, one to two weeks each) and basically during my free time when I think "What should I do now?" I just do the sprint and it takes the pressure off. I've still been doing it since I wrote the above post and it's been working pretty well. I've read 5 novels in the past two months or so (EDIT: for context, more than I'd read in the past year), and I've tried a variety of what I call "personal sprints" that include things like "Wake up at the exact same time for two weeks", or "Say yes to all invitations for things for two weeks". I sort of have the mentality now that "The sprint is the law" and it's helped me have a level of discipline that I haven't achieved in the past. It's really fun because it's low pressure and experiment-based ("Let's try making excessive eye contact for a week, lol") and if something doesn't work out, you didn't spend much time doing it anyways.
Another less related thing is that I read that habit forming is sort of like a muscle, and once you form one habit, it can become easier to form others. So for a little while I was doing habit "layering" where I'd have a priority list for habits and basically as long as I did the top thing on my list, I was happy, even if I didn't get the others. Gradually I moved to the top two things, and so on.
Hope that helps.
At certain points in your life, you'll be inspired to build something for its own sake. THAT will be something worthwhile to contribute. Until then, chill out.
Want to increase your odds of that happening? Train your creativity. How do you do that? Play!
Play with things. Fuck around. Use it in ways it's not meant to be used. Break it! Have you ever seen kids keep themselves occupied by using things in weird, wrong, and probably useless ways? Do that!
Do things that nobody else is doing, not for what riches it might hold (because it probably won't), but for the pure joy of play and exploration, not caring about the judgments of everyone who will inevitably shake their head.
Randomness breeds novelty.
I force myself into a specific topic that interest me. I think that's the key.
For open source projects, choose something that you are really interested in and start a public git repo. Whenever you are motivated to work on your project for an hour or two, then add a feature. My friend, it is all about one thought at a time, one keystroke at a time. If you are not enjoying the creative process then stop and start up again on another day.
1. Just build something very very tiny thing and sell it for less than 5 quid something like $1.99.
2. Repeat until you see some success and get motivation.
3. While doing this just be in the same tribe who's making things like you. Talk to them and share your experiences with them. Grow with them, together.
4. The momentum automatically move you to the next level.
5. Finally find a mentor who's been in this journey before and embrace his/her advise.
Let me know where can I buy your first tiny product and I will buy no matter what it is.
(I produced written-word stuff; tech tutorials etc).
Each time I went through ramping up my output, I did so because I realized people were benefiting from what I produced. I did realize people were reading what I wrote. It was the knowledge I was doing somebody some good that motivated me.
You asked for advice, so I'll give it. Open up that YouTube channel, as soon as possible. Add more videos when it makes sense to do so, not because of a self-imposed schedule.
If the subject matter of your YouTube channel is relevant to your workplace, see if you can work out some kind of lunch'n'learn project so you can present it. You can also invite colleagues to present their stuff in the same lunch'n'learn series.
This next bit of advice probably sounds impossibly artsy-fartsy. Let your muse -- your motivation -- find you. Don't force yourself to crank stuff out just for the sake of cranking it out. Your job has enough of that.
As for finding the time.... what are you doing reading Hacker News? :-) :-) This point applies much more strongly to FB and other media outlets who measure "engagement" -- who get paid for stealing your time.
I can share my experience. I post some guitar videos on a youtube channel, maybe two or three times a year, whenever I feel like it. It doesn't seem like much, but it's been 7 years now and I have about 20 videos now. It's not going to change the face of the world, but it's satisfying. I can follow my progression, it's an additional motivation to practice, and some people find them useful.
Same thing for github. Whenever I write some code, I put it there. Better than lost on my hard drive and it incentives me to write better documentation. Even if nobody cares, it's still useful for me. I regret now that I didn't do it back when I was a student (pre-github).
For instance, Wednesday and Friday are dedicated to nothing but writing blog posts. I tend to spend half the time researching and the other half writing.
By the time Wednesday rolls along, I'm pretty eager to start writing. I usually keep a buffer of a month's worth of posts.
Then the rest of my time is spent producing content of other types (courses, etc.) and consulting.
Luckily I don't use FB, IG and barely use Twitter. HN and Youtube still soak up a pretty decent amount of time, but I use various browser extensions and other tactics to keep myself in check. In fact, I blogged about that a few months ago and this combo works better than anything I've ever tried.
I block these websites because habit takes you there when you're bored. The dns failure is simply a reminder that you were about to waste time, and you can put it to better use.
There is nothing wrong with consuming information, what you put into your mind eventually comes out in creative expression. In my case I can't force myself to be creative when I don't feel like it, but when the creative impulse is felt, my raw materials (the contents of my mind) are better ingredients.
As for Youtube: seems like you fell into the trap of planning too far ahead. Most channels never work out. Even if you stick to a weekly schedule, viewership will only steadily rise. Why not release your current videos, try a (bi-)monthly schedule and see where it goes?
Fear of commitment is a rationalized excuse your brain makes to avoid burning calories :). Or it's to avoid a setback: you put in all this effort and it did not work out. People avoid relationships for fear of commitment too, without ever giving it a shot, or asking if the other person also wants commitment.
For open source or research I give myself very small timeframes. You can think about it the rest of the week, and have a very productive hour or two coding or writing.
As for procrastination, check out "productive procrastination". It helped me get stuff done, when even more important stuff needed to be done :).
Make sure to find something you enjoy doing so it's not just more work.
Don't confuse "being productive" with "seeking numeric social validation". For example, why would you make more videos? Is there content which you once wished were freely out there and can now provide yourself, or would you just feel better getting 100 views and 10 likes on a video you made instead of reading a book?
I'd also highly recommend a book called "The War of Art" which was written by a procrastinator who eventually made good.
I'm still struggling with procrastination, but my personal feeling is that the key is probably to create a routine where you just execute your productive work during a set block of time everyday, much like a job. This is just so you don't have to decide whether or not to do the work "now" which will break the procrastination doom loop. Good luck!
When you post on Facebook or Instagram you are just doing work so someone else can make money off that work. If you want to actually make something then do it for yourself.
Having deadline helps a lot to start and finish projects. Procrastination can also be change in productive procrastination: instead of making you video you can write a blog post. For example, I'm right know programming a game I wanted to start for a long time instead of writing a research paper (and oh, commenting on HN).
Finally I use visualisation before starting something. Instead of just thinking or writing down "write the blog post about XXX" I envision the final product for some time and how it will affect positively my life. Then I have more motivation to actually start it!
While it sounds nerve-wrecking - it was for me - actually, it's a low commitment activity. You're not trying to prove anything. You're not even expecting to make new friends. But watching other makers in action, and listening to what they say can slowly build up that push for yourself to become one.
It's different to reading and watching interviews at home because when you're out there, it all becomes personal. If I read about a guy who dreams of the next guitar picker, I'd probably roll my eyes and move on. But actually meeting one who is excitedly showing his prototype, and talking about his dream and motivations, that's endearing and actually inspiring. I may not see the guitar picker to ever change the world but I add this to my mental stock of maker stories, and this helps me to keep going.
Lately, I've found that it's much easier to slide into my project and focus on the real essentials. The more I go out and meet people, the more confident and articulated I get, and my idea gets refined further. And yes, inevitably you do make new and quite interesting friends :)
When it does become too much, then just step back a bit - remember, this is supposed to be low commitment!
Doing this I publish about 25 articles every year. Wanna take a look? Is at https://aurelianito.blogspot.com (warning: content is written in Spanish)
And lately I also do some YouTube screencasts about go, the game. The trick for me is to commit to upload whatever happens in the screencast, no preparation at all. Check them out too. http://www.youtube.com/playlist?list=PLTQoyI2lMoFO2bGa2b6Sy-...
1. have a fixed amount of time to read HN, Reddit, Twitter, Email
2. have a release schedule
The first rule helps me to keep the consuming time to a minimum. Only once in the morning, after lunch and after work I check the recent (!) updates on all necessary platforms. It can be hard in the beginning, but at some point it becomes a habit.
The second rule helps me to stick to producing. I blog about web development and self-growth and therefore I have a backlog of ideas to write about. Once a week I post an article.
Also, I realize that existing as an adult outside of a field or shielded by a big company is quite a surprising experience. You have to integrate with people, communities, society and is mostly an altruism thing. It makes you see other working people differently and also adult life altogether.
My take is that you really haven't found this love in your life yet. You are trying to pigeonhole other peoples passions (like youtube vids and OS projects) into yours. That will never work long term.
For me, it was music; I loved it so much that you couldn't stop me from playing, and pretty much all available time outside work was spend practicing and playing in my band at the time.
It was the ideal social lubricant as well, as being a gifted "nerd" 35 years ago was a totally different thing then it is now. Literally, at work and school I interacted with the math kids that were often picked on and made fun of.
Playing and practicing live music not only soothed my soul, but gave me self-esteem and a ton of social status. And it hardly ever seemed like "real" work
I think that is the key for a sustainable hobby commitment.
In Greece we say "The beginning is half of everything" and my problem is beginning something. Sticking to it is not a big issues assuming I do not take a large break for it , say a few days or couple of weeks . Then I have to force myself to start again. Which as you imagine happens ofter. But when I do it , its easy to continue, no pressure involved and makes me happy.
So yeah starting something can be a pain in the ass and you need to punch your way through this phase which fortunately does not last long.
Forcing yourself to start doing something is a good idea. But forcing yourself to keep doing it can be an indication that it does not make you happy or you simply do not like it. Dont do that. Pick something you really like. It does not have to be amazing, just something you like doing.
Whats the worse it can happen if you pressure yourself ? Will you head explode ? Will you be very unhappy ? Will you fail ?
Heads do not explode, happiness is not permanent and failure is part of life and improvement.
I think if you pressure yourself hard at the right time can easily solve your problem.
In the end you will realise that motivation alone is not enough always to overcome fear of failure, boredom or confusion. See pressure as your first product, self motivation. Actually self motivation is best thing you can produce. The second best, is motivating others.
If you'd like, I'm looking for help on https://github.com/GoTeamEpsilon/OpenEMR-AWS-Guide
Send me an email at email@example.com
...this applies to anyone in this thread as well :)
The War of Art  and Do the Work  both are excellent books about making things and why it's hard. I found them motivating not only because of the solutions in the books but also just because someone describing the problems I have with creating, so clearly, is helpful to read. It's nice knowing you're not a crazy person and that these are problems a lot of people go through. They're also very short and easy to read. So give them a shot.
This is what helps me:
- Think backwards. How many years do you have left? How many days? Time is running, we only get to live once
- Stop consuming in the morning. Instead of checking emails, news etc on your smartphone, I get up and write down all the things I want to do the day. Then I start working on the top items
- Enjoy traction. Once you release something you'll get hooked on the data. How many people like my post? What's the feedback I receive. When I see that there is traction, I get excited and I enjoy interacting with the community
Btw: You are already contributing :) Look at the feedback here.
Start small. Put online what you learn. If you learned something today, you might teach someone else tomorrow.
Doin this I publish about 25 articles every year. Wanna take a look? Is at https://aurelianito.blogspot.com (warning: content is written in Spanish)
Oh! The key for me is no commitment. Just do the first video/ blog post and work from there. If I take a year off it is fine.
now that is a radical step but it has worked for me. what is key is creating the right environment to be productive. not everybody can be with 10,000 distractions just one mouseclick away.
I'd say, if you want to do YouTube, you should at least do the 1 per week thing. If you are short on time, you can do Q&A/livestream episodes. I'm sure you'd be are aware of Casey Neistat , who has said multiple times he wished he'd done daily vlogging sooner.
 https://www.flickr.com/photos/richardcunningham/albums/72157... https://www.youtube.com/user/caseyneistat
The commitment is a big deal too. I don't want to start a blog, write two posts, and then abandon it, and I know that's more likely than not. I even struggle a bit with what the voice would be of the blog: would I write about work-related things? Just whatever comes to mind?
I don't have a great answer for you, but accountability and not breaking the chain are the two biggest things I hear: creating something every day, and having a couple of friends checking in on you, for instance.
Oh, and in my case, having just had a newborn doesn't help the situation. My brain is just too tired with the down time I have, frequently, so here I am, writing in an HN comment instead of the course I should be writing, or the other ideas I have kicking around. :-/
Also, think what you really want to produce. It could be that your goals are too vague and big.
As soon as you stop thinking of it(blogging, making videos, coding) as a committment you will be at an ease.
The trick is to make a committment for two-four weeks, after that it could become a nice habit.
If it still feels like a burden it is not the right thing for you.
If you want to run a marathon, the most important thing is to run 1k per day. Once you're out in the road, the distance will take care of itself.
Some epiphanies I have encountered on my path:
- Terminal value - do things you want to do for the sake of themselves. Not to achieve some purpose, or benefit the society, or whatever, understand what YOU value and want to make.
- You don't "find your passion", you choose it. Make a decision on what you want to do with the following years of your life, and then figure out a way to make it work.
- Enjoying the process of creating things is a combination of skillset and value. When it works - programming or writing is supposed to feel like playing minecraft(or whatever is the most engaging computer game you can imagine). You do not force yourself to do it, you do it for the sake of the game. You are driven to make fun stuff, and then you do it because you can.
- Read the book about Flow, and about gamification - understand how your mind works and what drives it. It's all about the reward loop, your brain craves dopamine, and you satisfy this craving by setting clear, small goals and accomplishing them.
- If you feel "fear" I would guess that it's either because of the lack of skill(you dont want to waste time and hard work when you're not sure that you can successfully create something valuable), or because of the "ego" - you care too much about your self image, about what others will think of you or about what you think of youself, you tie your sense of self-worth to the quality of work you produce. To fix the first one you develop more skill, to fix the second you realize that this shit doesn't matter. The only thing within your control is how much understanding/practice you put into your craft, so you learn to only care about that and none of the irrelevant stuff.
1. Find the terminal value your brain craves. What do you want to do with your life, what do you want to make?
2. Follow the path to mastery, give all of your attention to getting good at what you do. That's the only thing within your control, and everything else doesn't matter.
3. Focus on practicing your craft, for the sake of the process. Design a rewarding process by understanding the idea of flow state, and your brain's core drives, and turn it into a habit. Set clear, valuable, attainable goals, break them down into simple steps, and accomplish them. Make this your lifestyle.
And creating cool stuff will simply be a side-effect of this process.
Also don't feel too guilty for "consuming" stuff, it's okay to relax and have fun and watch comedy and be inspired by the creativity of others. Focus your energy on creating more, not on consuming less.
Also, don't worry about following the schedule - it's an unnecessary arbitrary constraint you've made up that will just make things more difficult and add pressure. Moving further matters, following a plan does not. Use it as a tool if it helps, throw it out if it stands in your way.
It sounds to me like you feel pressure to do this because someone told you that you should be a creator. So in that sense, yes, that's foolish. Instead pressure yourself to accomplish something you want to accomplish.
Let me use a parallel from my previous life as a technical/digital marketer. There was a prevalent idea out there that you should be "building your personal brand" all the time. Every speaker would tell me this, and they were the experts, right? So I wrote lengthy blog posts in my free time. I'd tweet and retweet and follow the right people, making the right connections, working for the right company.
I had built up to several hundred twitter followers, hundreds of thousands of pageviews, and was on a path to becoming a well-known voice in digital marketing. And I was absolutely miserable. I felt constant pressure to say something meaningful every day. When my blog posts received lukewarm reception or criticism it was very hard for me. I'd internalize it and try to use it as fuel to do better next time.
Then one day I followed a fantasy author I had just read. He had 100 tweets, 10k followers, and only following a few others. And he'd only written one book so far! He'd done none of the work I had to "build his own brand," but he was infinitely more famous than I was. The reason why was obvious: he'd contributed something of great value. I was out there rehashing knowledge and adding 160 character commentary, but it was all low-value high-volume stuff. And I wasn't contributing because I enjoyed it. I was doing it because someone told me I should from a podium.
Those people who talk about contributing are the contributors. Those people who talk about building a personal brand have the podium because they built their personal brand. They're approaching things from their perspective. But I was an introvert who hated speaking. I was working to a goal I would HATE.
So how did I make the switch? I thought about what I wanted to accomplish. That was a comfortable life with financial independence with very little attention from the outside world. I realized the speaking circuit was a high-investment highly-visible way to make money, so I abandoned my "personal brand" altogether, which didn't make my bosses overly happy. After all, I was getting their name out their as well.
Instead I created something that made money quietly. I enjoyed the challenge of it, and I felt like I was finally working towards something worthwhile. I worked most weekends, and honed my skills. I became a better writer and learned a lot more about coding. Knowing I'd started on the right path - a competitive but clearly potentially lucrative path - gave me confidence and motivation. Now, a few years later, I'm basically retired. I still have goals, but things that would have seemed ridiculous to me a few years ago seem within reach now.
If you want to cure cancer, you don't need to write a blog or contribute to projects. If your goal is to become a name in the software development community, maybe you do. But don't create for creation's sake. Think about what you want to get done, and if that involves making money be certain that you can do something measurably better than what's out there already.
TL;DR: Don't focus on 'creating' as your goal, but on what you want to accomplish
Each moment is an opportunity to serve.
There's nothing wrong with just consuming. It's how most people live and odds are that you're not that different.
I'm a proud consumer and non-producer (outside of work).
What I've found is most people look entirely at efficiency. They want to produce more with less, and this is their goal. However, this usually completely leaves out the value of the activity in question. What value is it that you contribute to open source? Do they provide a truly meaningful difference in your life currently, or are they merely passive participants that are means to an end for you? Do their values and goals match your values and goals? Chances are, if you answered yes to these, then you will not need much more motivation to give back to these groups. You will do it out of a sense of duty to your values and knowing that it will satiate a personal demand you have.
Now what can you do today without reading all of the literature in the world on the topic? Write out the eulogy you want told at your funeral 3 years from now. Seriously, turn off all distractions and think long and hard on how you want your family, friends, coworkers and connections to speak of you. Chances are through this activity you will begin to define some values that define your character. Hone in on these, and identify tasks that will relate to these values and drive them forward. Think of what single activity you can do today that will have the biggest impact on your ongoing well being, and figure out how you can turn that into a habit. After you start having small successes, you hopefully will begin rewiring yourself to start chasing personal victories as opposed to constant consumption.
What I personally found is that I tried to do things for the sake of doing things. I would create simply to share, and skip the 80% of the work that would actually provide me value. Sharing with the world is important, but if you don't go through personal growth while creating, sharing with the world becomes empty and you chase metrics and statistics. You will beginning acting out of need for validation as opposed to acting out of what's important to your values. The closer you can tie your values to your actions, the more satisfaction you'll ultimately get out of what you do. It makes it easier to prioritize tasks and see a week/month/year in the future and know that you're making the correct decision not just for present you, but future you.
There's a ton of crap advice out there on this particular topic, but there's a lot of good. If you start with the few books I listed above, note books that the authors reference and relate too. Create a list from these books on what to read next. Be ready to throw away old habits and models that no longer drive your life in the direction you want to go. Habits are reprogrammable, but the longer and deeper they're held, the more effort it will take. Most people reject this entire process because in the short term, you're more likely to be uncomfortable as things don't always work out. You may lose some productivity, or at least perceive yourself as losing productivity, but habits pay off much like compound interest. It's a long game, the payoff is built up over time. Be ready to adjust your parameters to improve the likelyhood that you meet the long term goals, but don't be afraid to see short term losses. The more legitimate experience you get, the quicker it will be for you to know when to cut your losses and move on. You can always reduce this by reaching out to people who may have been in your situation. You learn more from others failures then you do successes, so make sure you fluff their accomplishments, but don't be afraid to ask about what they "wish they knew". This is often where the real advice is.
In my experience, if you find something that you really, really like and manage to reserve the necessary spare time, then you will become productive automatically. That could be anything, from sword smithing to rocket construction. If your projects persistently fail or die, then you're perhaps already too busy with family or daytime job, or maybe what your doing is not really the right thing for you. Just do it for the fun, never for money or fame.
Self-advertisement: http://richard-loewe.de https://ericspace.bandcamp.com/releases http://peppermind.com
I have had a side business with a partner since 2006. In that business we might have turned over 50k in all that time. We aimed for it to be a replacement for our day jobs. The problem is the exact problem you have.
About two months ago I suddenly lost the ability to use my legs thanks to an abscess compressing my spine which was removed and have undergone rehabilitation. I'm still on crutches, and hope to be able to make a full recovery within a couple of months. However I spent 2 months thinking about this a lot.
What's interesting is that I could have spent 2 months working on side projects - I was off work, an inpatient in a hospital with WiFi and my laptop. Instead, I decided to take stock.
I then realised the key was the rehabilitation itself was giving me the answers, and I concluded:
- Whilst having big goals is awesome, you need to focus on the here and now and doing the work you can do right now
- Small and often is better than big commitments
- Celebrate small victories. Got 5% more done than you did last week? Well done you - keep that up, and in a year you'll be doing 12 times what you did last week.
- Keep a log of what you have done once you've done it, with dates. Once a month go back and reflect, and congratulate yourself for the progress you have made. Seriously, this helped me so much - it's a bit like not wanting to break the chain.
- Give yourself time to rest. Your body really, really needs it.
- Things will rarely work out quite as well as you hope, or as badly as you fear. Just do the work, and see where it takes you.
- Motivational videos got me out of slumps a few times. These both helped me at different points:
https://www.youtube.com/watch?v=hbkZrOU1Zag (technically a Nike advert, but I have the audio of this on my phone and listen to it a few times a month)
All of this got me through rehab, and I'm starting to see it drip into other parts of my life including work and side projects.
Don't be so hard on yourself, but remember the best laid plans are worth nothing: go get a pomodoro timer and do 25 minutes on that project right now. Then do another tomorrow. And then perhaps another straight after. Have a days rest between if you want.
If you find yourself doing two of those pomodoros every other day, you're going to look back after a few weeks and realise you've actually got quite a lot done.
Let me tell you, you sometimes you would like to stop having to be an active producer.
It is a rich person problem to not be able to produce in whatever field (intellectual or physical).
If you are interested, here's a job search: https://www.amazon.jobs/location/madrid-spain?base_query=&lo...
I will echo what others said though: you need to speak Spanish in Madrid in order to survive, more so than in Barcelona. Outside of the more touristy areas English may not be enough in many places.
- Pharma industry- Car manufacturers (industrial software, automation, etc.)- Misc manufacturing (again, automation, robotics, plant/line planification)- Finance, insurance.- IT consulting, logistics, start ups, etc.
Pretty similar to everywhere, plus industrial stuff.
Best paying jobs: finance, Pharma industry, car design-related (3D, materials, aerodynamics, etc.), SAP consulting, import/export logistics.
Before getting too much depressed with salary figures, note that "before taxes" salary is not the full salary. E.g. someone making 40.000 "before taxes" means the company puts additional 13,000 for retirement and Social Security, being like making near 50,000 USD in the US (plus with 100% medical coverage, no matter how expensive is, e.g. a cancer treatment, or any other expensive treatment).
Of course, if you come from making 130,000-200,000 USD / year, you'll feel "poor" in comparison. For better salaries, New Zealand and Australia may be better options.
In absolute terms, but take in mind that life in Spain can be much less expensive than living in Berlin or Paris. It depends on the area and the job.
> I'm currently functional in Spanish but I have a long way to go until fluency. That's one of my goals in moving to Spain
Madrid is the right option then. Has worst climate with more hot in summer and colder in winter, and is as stressful as any other big city, but is a much more easier place to learn spanish, and (probably) an easier place for a foreigner to mix with the locals. Barcelona uses heavily Catalonian language for all: trafic signs, street posters, commerce, casual conversation, television, politics... all.
On the other hand, if you can find work in any of the other "big/but not so big" province capitals (or can do remote work) maybe you should consider it. Smaller the city, worst pay, but much better life quality. The climate is better around the coast, as usual.
> How limiting is it to not be fluent enough in Spanish for use at work
As long as you speak english and know your stuff, should not be a big problem. English is worshipped (an old national inferiority complex) and in fact could be much more difficult to you to find a job in Spain if you were Spaniard.
Barcelona native here, lived and worked for years in the NY tech scene and now I am in London, although I go back to Barcelona often, and I'm seriously considering moving back. (I don't know the situation in Madrid well enough). Here are my points:
On the one hand, the tech ecosystem is clearly not as strong as Berlin/London or even Paris, and the average engineer salary is _low_. That also might mean there is more room to experiment and make an impact, offset by a general not-so-mature or agile business environment. Barcelona has good universities, and that means many good developers eager to work on cool shit for lower pay than in other places, if you're into starting your own thing.
Barcelona has many peripheral, small offices of large companies, so I'd say you may be able to find some of the jobs you're looking for in that circuit.
Additionally, Barcelona has a wonderful creative scene. Many strong designers, any many studios doing interesting stuff. Not sure if that's a world that interests you, but many small and big agencies have offices in the city.
And I know you're not asking about that, but dude, quality of life is unbeatable: weather, food, culture and pace of life compensate for what you may be missing on the other end, particularly if you have cultivated relationships in the rest of Europe that you may be able to maintain and use to secure business.
It may depend on what you are looking for. If you truly prioritize really good tech jobs, I would say don't do it. Adjusting your expectations in terms of salary and general ecosystem is required. Salaries won't be at London or Berlin level by a pretty big margin, but at the same time you should adjust by a cost of living that is about like 40% of what it would be in London.
If you want something more balanced, and a rich well-rounded human experience (ha), I'd encourage you to consider the full picture and do it.
moved to Barcelona about two years ago (from London). Here's a post I wrote last summer about some of my impressions. http://www.freyfogle.com/post/1466857133/moving-to-barcelona
In short: quality of life is great, and the tech scene, though still small, is growing rapidly.
For the Barcelona I highly recommend you subscribe to this weekly newsletterhttp://www.barcinno.com
Barcelona is great and it's difficult to find tech people, demand is skyrocketing. Most of them already have a great job.
Salaries range between 20k for entry positions to 45k-50k for top senior positions. Cost of life is adjusted accordingly. Tech people are well paid in Spain and have non trouble living an affluent life.
Language is not an issue. I do all my interviews in English/Spanish. 99% of people in Catalonia do speak Spanish . You'll definitely need to learn Spanish for life outside your workplace: shopping, taxes, etc.
Barcelona is very tourist friendly, hipper and has better weather than Madrid. Madrid has better top level positions (director of big telco, top public servants, etc) and better "quality culture": cinema, theater, etc. That being said both cities are great both in work & leisure. You'll feel comfortable in both. The only thing that makes a real difference is the sea: if you're used to being near the coast, Madrid can be a bit stifling.
Spanish tech is pretty hot but you won't find any unicorns. You can make a great career but we don't have any Googles, Apples or Facebooks. However some big companies have offices in Barcelona: King, Social Point...
The catalan area is undergoing a political process where they want independence from Spain. Nobody knows what's going to happen. In any case that hypothetical independence would affect both cities more or less equally -- if only by different reasons.
TL;DR: Both cities are great. Barcelona has the sea and Madrid is the capital. Tech jobs are paid well w.r.t. cost of life. Spanish people like to argue about politics but that shouldn't be a deal breaker either way. Reply or PM me if you want more details.
Being both cities relatively near, why don't you take a week to visit them both? Register to some meetups, visit tech hubs, incubators, etc, and see for yourself which one feels like the place you want to be in. Now is a good time to visit, as the weather is calm. I would stay away from Madrid on august.
As for freelancing, I wouldn't recommend unless you are going to work for foreign clients.
Foreigners will probably be more familiar with Barcelona, but I find that Madrid is generally more welcoming. Most people who live in Madrid, although they may be Spanish, are not from in Madrid and so you'll find that most people are in a situation not too different from your own. The food is great, nightlife and culture some of the best you'll find in the world and you're well connected with budget airlines and high speed trains.
If you're at one of the more well known tech companies in Madrid you'll have no problem getting by with limited Spanish. Most work and all documentation is of course in English. You might just find the after-work/socialising sessions are where you'll most suffer not being a native speaker - but of course it's only a matter of time before you'll improve. Outside of work, with basic Spanish you'll get by, but it will be much easier and more enjoyable when you're comfortable cracking jokes in Spanish over a few "caas".
The sector is definitely growing due to a few recent success stories and although the sector is not huge, there seems to be a solid amount of available venture funding, appetite for risk and I think it will only continue to grow as companies like ours put the city on the "tech" map.
We're hiring if you're interested :-) https://cabify.com/jobs
From what I see, wages are considerably lower than in the rest of Europe and the US.
On the other hand, some offices I have been in have spectacular views of the sea :)
Generally good opportunities but expect pay to be a lot lower than London etc. Cost of living is pretty cheap though so it evens out :)
Having said that, exciting career opportunities in south of France are kinda limited.
BTW: If you want a place that is indeed very cheap, look at Portugal (I don't know how's the job market there, but several of my colleagues moved to Lisbon recently and I think they're doing well).
Both are awesome and whatever you choose you can't go wrong.
Do you have a work permit?
If I was you I'll double check other cities like Valencia, Mlaga and Mallorca.
Bear in mind that the cost of life in Spain can vary a lot from one city to the other.
People might expect you to talk Catala in Barcelona but you should be able to get around with English and Spanish
Learning a language can be daunting at first but it gets there eventually
Native from Catalonia here. Specifically, from Barcelona.
First of all, let's talk about the language because I see many concerning posts in this thread. Anyone that tells you that you won't be able to speak Spanish in Barcelona is highly misinformed to say the least. I've worked with people from around the Spain without any issue, either for them or for me. No issue either when you visit the city, go to restaurants or anything like that.
What is more, my parents are from southern Spain and I can tell you that my mother still does not speak Catalan after 30 years, just because she does not want given that she feels more comfortable speaking Spanish.
Obviously, as with any other bilingual nation, people here feels more comfortable speaking either Spanish or Catalan, or both. In my case, being raised in Spanish and talking with about 80% of my friends in Catalan I feel comfortable with both. I've seen native people having trouble both with Catalan and Spanish, but you, as a foreign, most probably won't be able to realize that. Funny thing, I'm from a town 20 miles from Barcelona, and when I moved to Barcelona I was surprised how much people defaulted to Spanish.
What's not debatable is that when people speak one to another, they might do so using Catalan, so in those cases you might not be able to understand it - at least for the first half year, given that if you understand Spanish you will only need some time to train you ear to understand Catalan too.
Another point, answering other posts. In some cases, Spanish accent is really complicated. Depending where do you go, sometimes not even a native Spanish speaker will be able to fully understand everything (e.g. you go to Cadiz). The same might happen with Catalan if you go to Mallorca ;)
Regarding the tech/jobs scene. Right now, Barcelona is living a bubble in the tech field. People saying that the salaries are low or tied to the cost of life are people who might have been living abroad for some years being unaware of this fact, at least in Barcelona's case.
What's happening in Barcelona is that many foreign companies are opening branches here because it's easy to attract talent from around Europe (good weather, great lifestyle, safety, beach, mountains/forests, etc) and college here are quite good too. As someone has stated, senior salaries for developers go around 50K, which is a LOT taking into account the cost of life (e.g. nice flat in Barcelona's downtown might be 800, daily lunch menus are 10 - first, second dish, desert). In general, educated people not in the tech field here might do about 30/40K and have a very good lifestyle.
There's a lot of foreign cybersecurity companies operating here, many dev startups too, big consultancy companies and, as I said, many other companies coming from abroad which make the salaries go higher and contributing to the bubble.
Lifestyle is unbeatable here. I was in San Diego, CA for more than a year, so I know what I'm talking about :)
What most people coming from abroad miss is the opportunity to get the best from two worlds. Being able to work and experience Barcelona while living in a suburb where you can walk to the beach and bike/walk through the forests. That's something Madrid cannot give you.
One last thing, whoever tells you it's perfectly OK to go around with English only is highly misinformed too. Not everyone speaks English here. If you go around the streets trying to talk with people it's quite likely you might find people who don't talk English. Another story is in your workplace. Most likely people will ""talk"" English if you work in a tech job. But bear in mind, when I say talk I mean babble. You'll have trouble understanding them in the beginning, but I guess they will improve over time as you will with Spanish.
On Madrid vs. Barcelona, the level of english spoken in Madrid is much lower among engineers and I suppose in general. It's also noted that working culture in Madrid is more 'formal' (dress, manners) than Barcelona. An example from Spanish culture is that Madrid refers to catalans as hippies and Catalans to people working in Madrid as 'suits'.
As for economic differences Madrid has more headquarters, especially of companies active across LATAM while Barcelona has manufacturing (automotive, industrial,..), tourism (a lot) and about 75% of the countries' startup scene. cfr. https://novobrief.com/barcelona-madrid-startup-ecosystem/
The tech sector in Barcelona is booming with new investments and new funds entering. VC funding used to be relatively inaccessible but all major EU VC's invest in Spain now and it has two great homegrown funds too. There are many bootstrapped companies and some big tech companies have opened engineering offices here.
There are plenty of english-speaking conferences and meetups going on and it's easy to meet other engineers.
You won't have much problems mixing in as most meetups are in English and engineering teams are often a mix of foreigners and Spaniards. I don't think not speaking spanish will hold you back professionally. In fact, our team is majority British :)
In terms of outdoor activities you can do both are not really comparable since Barcelona is near the sea-side but also a 2-hour train ride away from a ski-resort in Andorra.
In terms of weather both cities get really warm during the summer, but Madrid is located within a group of hills and traps the heat more.Barcelona on the other side has some shade from the mountain and its proximity to the sea makes it more humid which makes it tolerable except in July/August. Catalans tend to take long holidays in these periods. The winters are milder though, I have been wearing t-shirts in January ever since I got here.
In terms of absolute salary the amounts are lower than London but in terms of quality of living I find you get more value for money.
For startups the salary levels are about:
Juniors get around 25k
2y+ work experience gets you around 35k
Senior usually gets you around 50k
It also depends on your stack as PHP, .net and Java pay less.
However, there are big companies here that have put engineering offices here such as Xing or Typeform that can be negotiated to Berlin levels. They will always try to pay you Spanish levels first but they are happy to pay Berlin levels when pressed.Their offer range is from 55k to 75k
As for contracting, there is almost none of that here. The ones I know that do it contract remotely for London.
Madrid native here.
The scene is growing and it's exciting. I work at carto.com, and there are plenty other like it (growing startups). If you want to visit our offices, hit me up at @gfioravantti and I'll give you a tour!
Salaries are low but quality of life is top notch
(BTW, this boggled the mind of my younger backpacker self from California who grew up on Mexican Spanish.)
Many people ask me why I haven't moved permanently elsewhere. The answer is simple: quality of live. It's really hard to get the quality of life that we have in Spain (free health care, awesome food, awesome weather, lots and lots of places to visit on the weekends, awesome hiking places, beaches, mountains to sky, etc). Specially if you have a high salary like us in tech do.
About Madrid and Barcelona. I think both are good choices, but let me summarize some thoughts:- Barcelona. It has a beach and the sea; if you are really into it, it's a great choice. It's near France, so it's great to rent a car and travel to Europe (France, Italy). The city is lovely although there are way too many tourists now (you will avoid many areas). It had an ecosystem much bigger than Madrid, but right now it's not anymore. The design community is bigger there. There are more international people living there for 1-2 years, but they usually leave.- Madrid. The bigger companies are here (Amazon has tons of good paying jobs, Google, Facebook). If you avoid Puerta del Sol, the rest of areas are very calm. It has high-speed trains with all over Spain, it's the best spot if you want to travel. The startup ecosystem has grown a lot, Google opened a Campus there (like in London). There are many accelerators in Madrid. And many of us who sold previous companies are already into our 2-3 companies. Wages are higher and the cost is kind of similar now (what they told me in Barcelona two weeks ago). Madrid has more events than in Barcelona.
About the work. If you work in Tech, Spanish won't be a problem neither in Madrid nor Barcelona. In both places you may want to learn some Spanish & Catalan words to communicate better, but the situation is improving a lot (there are thousands of American & British teachers in our schools).
Salaries? Lower than in UK and Germany. But the top companies are paying much more than traditional companies. Let's say that the idea is that you save the same money. A Senior dev can get paid between 40 and 60k in Madrid in one of the top startups + stock options.
Don't do freelancing with local clients. If you are into remote, that's the best way to save money. Remote for a US client and work from Spain.
If you are searching for a startup and Madrid is finally a good option for you, check ours https://ontruck.com/work-with-us/. We are around 40 employees, we have grown a lot () in one year and we have just been invested by Atomico and Idinvest https://techcrunch.com/2017/05/11/ontruck/. Our focus is Europe.
I was in a very similar situation to yourself almost 5 years ago so I'll try and list some of my thoughts and experiences.
I was working as a backend developer in the UK, my girlfriend was off doing her masters and told me I should do something interesting with myself as I felt stagnant in the job I had at the time.
I'd always loved Spain and Catalunya so took the plunge to move out here, my girlfriend joined me and we've now spent almost 5 happy years about here in Barcelona.
Getting a job:
- I found interviews to be similar to interviews in the UK.
- Companies are much slower in getting back to you and moving you through their pipelines. One company came back to me 3 months after having offered me a job and wondering why I'd had to look for other options.
- I joined a company of around 60 people, don't fool yourself that the work environment will be in English just because the interview was. I personally wanted to learn Spanish but it was still much tougher starting a job, a new life and a new language(s).
- While quality of life is better I'd say the work environment is tougher, people work hard and long hours here, at neither company I worked at did we do a standard 9-5. 9-7 was much more common with an hour for lunch.
- Management feels quite old school, they can be more rigid and traditional than say in the UK. Developers on the other hand feel ahead of the curve, there is more interest in side projects, new tech and trying out different skills.
- Salary is quite a lot lower, I took a 30% pay cut when I moved. I managed to get a couple of pay raises but the ceiling and cadence of raises is much lower. I'd attribute that to the more traditional management treating workers as equal resources and also that back then there were a lot of talented developers around (and less larger companies like King were in the area).
- Both companies I worked at worked in English official but in reality it was mainly Spanish, switching to English if there were non Spanish speakers present. I'd say having fluency is a huge huge boost to your career potential (and ability to make friends) :).
Quality of life:
Quality of life is great, a slower more family focused culture and a plethora of fun things to do within the city and surrounding areas. It really makes such a difference having nicer weather for both your mood but also ability to get out and do more sport or taking long Sunday walks (a great pastime here).
I think most people responding to you will rave about the quality of life (I'm one of them) but let me gave you some things that are tougher.
- If you want to learn and live in Spanish then you are best off in Madrid. Significantly less tourists and the use of just Spanish means immersion will be much quicker. Barcelona is great but due to having two official languages, a ton of tourists and foreigners means that a lot of people will fall into just speaking their native language anyway. You really need to make an effort to take classes, not switch to English and persevere. As my partner is also British we've had to make an extra effort as we speak English with each other.
- Making local friends is quite tough, all our friend are Spanish speakers from outside of Catalunya or South America. Locals are very friendly but they tend to have grown up with their friendship groups and it can be harder to integrate (doubly so as their are two languages and learning both to a good standard is tricky).
- Do not live anywhere near the center in Barcelona, tourists invade the city and really make it quite unpleasant. House prices are also rocketing for renting at the moment.
I now work remotely for a US company as it seems the best of both worlds, I love living here, the people,culture,food and weather all combine to make me happier. If you are serious about taking the plunge I'd look ASAP for a Spanish teacher, it'll be the best investment you'll make! Best of luck!
Quality of life is great, though, and not so expensive. The Lancet recently  put Spain's healthcare as 8th in the world, food is great, the social scene is very open to foreigners, climate is better than in northern europe, etc.
The worse part of your expenses in either Madrid or Barcelona will be renting an apartment, as prices are rising quickly (after the financial crisis, housing plummeted, so construction stopped. But now everyone with some extra cash is buying apartments for renting them, and there's extra pressure to make them a worthwhile investment).
Spain's economy is divided in tiny companies (PYMES), and huge companies. We lack a lot of medium sized companies such as the german mittelstands, and it shows on job mobility and opportunities. Compounding this with a small tech scene, it might be hard to find a job opportunity. But tech is growing quickly, as others have mentioned.
If you are functional in spanish, it shouldn't be a problem, but mind that spaniards are not so used to working with other nationalities, so you will be somewhat "exotic" and you will get a mild joke from time to time. You might find some "inferiority complex", particularly if you are german/french/american, as Spain has traditionally looked abroad for innovation and modernity references (famously pictured by Unamuno and his "Que inventen ellos" quote ).
The contracting area is dismal. Most of autonomos are either micropymes or false autonomos, actually working for one huge company, with total dependence and a huge risk, without the normal employee rights and securities. Spain is not accustomed to paying fair prices for contract work. And outside the tech scene, there will be often requests for working for free (typical for design or copy work), or without paying taxes ("cobrar en B").
On the Madrid vs. Barcelona topic I'm of course biased, being from Madrid, but I find that foreigners are initially much more familiar with Barcelona, and they overlook Madrid. Madrid is great! And more objectively: it is bigger, with more opportunities, without language problems (catalan might be an issue from time to time, mostly if you are still learning spanish, but you will also find people from time to time that refuse to speak spanish for political reasons), and with less tourists yet more foreigners (you will not be treated so much as a cash-cow tourist, as some of my friends have suffered a couple of times in Barcelona).
Overall, I'd say you can live very well in Spain, but it is not the place if you seek big career opportunities. Of course all of this is a HUGE simplification, and you can find excellent opportunities in Spain, and shitty opportunities elsewhere. I personally have a lot of french friends working in Madrid with excellent jobs and adamant on staying for the rest of their lives. And all of what I said is improving quickly; Spain got a really big economic push when entering the euro, and although the crisis stuck VERY hard, we are recovering and accelerating a lot!
 http://www.thelancet.com/journals/lancet/article/PIIS0140-67... (spanish) https://blogs.iadb.org/puntossobrelai/2016/06/06/que-invente...
Which are? Genuinely interested why someone would consider taking a huge cut in salary.
Instead of moving now. Why not slash your current expenses to the bone? Save like crazy for a year, then move with a nice bank balance and ease yourself into the country without the stresses of quickly learning the language, making good friends, networking, etc.
Even better, with a healthy bank balance. You could find out what is missing from the tech scene and create a start-up to fill it.
1. if your company is big and international you won't need to be super fluent in spanish. the city has plenty of expats so you spanish/catalan is as needed in barcelona as german is in munich (i lived in munich as well). you say you're functional, that's enough for now, you'll figure it out once you're here. if the company is "a startup" then it's a lottery, but most likely more than half of the people will be spanish speakers with some english fluency. they will all speak it but they'll often speak to each other. this is something that happens in my company on a daily basis.2. salaries are an odd topic. i can't compare to the US because i have no idea what people do with money there, but in terms of an average techie lifestyle i can say that barcelona and london aren't very different on a net level. you might get (unlikely) 90k in london for a senior dev position, and this is factually not much different from 60k in barcelona since most of the fixed costs (rent, public transport) are half the price. 55-60k for a senior dev position is possible (trust me) but not in a startup, unless you manage to snitch a lead position, which might happen. i've seen people moving out of normal position (not entry, not senior) and becoming leads in startups.3. the comparison was just with london but the same applies to paris. it probably doesn't apply to berlin since berlin has high-ish salaries (comparatively) and low rents, but it has its disadvantages.4. even if 2. and 3. don't apply i.e. you still are worse off on a net scale (after rent, tax, etc.), barcelona has its perks over london and, for my experience, munich. these are entirely subjective but if having a terrace with a hammock you can float in december with a hoodie drinking cocktails sounds like a nice idea to you, then surely you can't do that in paris or london. food is also a plus, and not great to say that out loud but since the expat scene is a bit of a bubble and the locals have slightly different lifestyles you might easily find yourself in authentic gems (restaurants, bars) you don't need to queue for hours to get in.
having said that, here's a few cons:* the tech scene isn't great. if you hate your new job you might have to relocate or search for something which is "alright" but not great. things are getting way better than even just 3 years ago but barcelona ain't no london.* if you're looking for 100k barcelona isn't for you* if you end up in an old-style spanish company (god forbid) you'll find out that the traditional mediterranean working culture is madness (compared to, say, germany or sweden). if you come from "strict schedules", "insane hierarchies", "little meritocracy" etc. then it's probably comparable. newer companies (spanish/catalan too) are much better so it's not a matter of genetics (obviously, just in case somebody thinks i'm a huge racist), rather, inefficient traditions* there are virtually no parks compared to even paris* house prices are very random and estate agents are a laugh. i found a very nice loft which was very close to a club. i told the guy "well i'd like to figure out how noisy this gets" and i'm pretty sure his idea of "figuring out" was renting it and spinning the wheel. if you come at the right moment you might find an 80sqm flat for 1200. if you're unlucky you might pay 1900.
i hope this is clear enough :)
If you are employed, what disclosures do you need to provide to your employer? What disclosures do you need to provide to the folks you are helping? Check your contractual relationships for possible conflicts. Get written riders to contracts as needed.
Will you treat your programming as an "in-kind donation" for tax purposes? If so, you should check with your tax professional to find out exactly what is needed.
What will be the intellectual property status of what you create? If you are creating code or compiling data, who owns the results of your effort? If you are working as part of a large multi-participant project there needs to be a work-for-hire agreement for all concerned.
As with any project, you need to have a plan and execute to the plan but provide a way to adapt the plan as situations change. It is usually smart to define how decisions get made and who is responsible.
Finally, you need to consider what happens when the project is in production. How do bugs get fixed? Who is responsible for maintenance? Will you be supporting your creation forever?
- Software that drives the NYSE and NASDAQ
- SpaceX vehicle controller (primarily what calculates the boostback trajectory on the fly)
Disclaimer: Please lawd don't let this put my on a watch list.
1. People believe most of their favorite softwares are already open source OR2. They don't think highly enough of closed source softwares to want to know their internals
Programming language design is distinctly different from programming language implementation and distinctly different from program optimization. A programming language designer need to have experience and skills in implementation and in optimization. Optimization is important because it assists in understanding the underlying concepts that need to be supported by a programming language.
Brian Kernighan, Jon Bentley, and others have long advocated for designing and implementing little languages, small domain-specific languages to solve a limited class of problems using "natural" abstractions, operations, and data. The Unix pic language is a classic example. Read the literature about "little languages"; Google is your friend. See, for example, http://broadcast.oreilly.com/2009/04/an-interview-with-brian... to learn about little languages.
What I would like to see is for you to learn about programming languages and their implementation before you rush off to design one. You might design, implement, and use a little language for a class of problems you encounter in a domain in which you work regularly. Use it to improve your productivity. Share the language with others who have the same problems to solve. Get their suggestions and feedback and incorporate them into your language system and repeat. That is likely to give you joy.
Designing a programming language is just the beginning. If your language is to have legs, you need to ensure that there are readily available implementations with libraries and operating system support for your language. You need to write papers and manuals and promote your language actively. And you need to be patient since adoption of a new programming language takes decades. And you need to be aware that language choices are often fickle.
If your goal is to eventually devise a new general purpose programming language, you need to program a lot of different problems in a multiplicity of languages and styles in order to understand what languages need. Asking HN is likely to be a sub-optimal strategy because most folks who read HN tend to conceive their problems and programs in terms of mechanisms and abstractions in existing languages.
You might want to look at the evolution of particular programming languages and the conceptual problem solution frameworks they express. Do this for several different language styles: procedural, functional, distributed actors. For example, I think the evolution of Python (including Lua and Ruby) contrasted with Perl would be quite educational.
Also, I would be cautious about trying to be different for the sole purpose of being different. Our current programming languages encapsulate years of experience and scar tissue which needs to be retained.
Why? I would never destroy anything I'd created like that. Unless you're doing it for some sort of closure, the way people throw things into the ocean in books and movies, I don't see the benefit. On the con side, you never know when you might start it back up, or just have some use for it. More than once I've gone back to a project I hadn't touched in years and either used it again (e.g. a "one-off" utility script), or just copied pieces of it to use in something current.
I think open sourcing something you're done with (that wasn't already open source) is a great idea in general.
After accumulating a few hundred of these, I started going back and reviewing what I'd accumulated - a short one-line description, and a screenshots folder, following a naming convention under a ".projnfo" folder (description.txt, visibility.txt, screenshots\*.png, etc.), with a quick program to accumulate these into a single HTML page overview. My latest iteration of this actually adds shortcut links to launch VS, git shells, etc. and dynamically updates, but ditched the screenshots (for now): http://i.imgur.com/gbj1Cr5.png . I keep telling myself I'll eventually spin off a public version of that page, but so far I haven't. But a common goal: Make it absolutely trivial/low friction to give something a quick summary.
Most recently, I'm now also trying to embrace the idea of "always be shipped (tm)" as a means of combating my tendency to get hung up on perfectionism - in the most extreme form, this means a public github project and an empty initial commit is my first push, the second commit maybe adds something that's actually usable, and the third commit is a .nuspec so I can package it and reuse it at a whim (completely ignoring the question of if it's even worth reusing.) This also encourages me to pick up an old project against instead of rewriting a whole "new and improved" version - easier to just fix the old one than go through all the effort of .nuspec s and new github projects etc etc etc... and in this state, "closing" a project is a simple matter of no longer committing to it. No cleanup necessary before making it public - it already was public!
I still have some projects that I never make public, or only make a github page public for though.
I also try to always put up a paragraph or two and maybe a screenshot on nfriedly.com/portfolio.
My projects are rarely "done", but "good enough to include in my portfolio" is a major milestone that often coincides with when I stop working on it so much.
Often times, you'll have a hard time running old stuff you wrote (finding the same versions of the compiler/libraries/tools/etc.) so try to vendor your dependencies if that's an option. Even if you can't run your code down there road, having the source file can be a fun read or useful.
For non-code stuff: convert to a plain file, PDF or screenshot and file it away in your Dropbox/Google drive/whatever.
I had a bunch of Java applet computer games that ran for more than a decade but eventually were killed by applets becoming obsolete.
I ended doing the following:
1. Putting all code on github.
2. Making a series of youtube videos of the gameplay.
3. Writing a blog post.
Obviously this was a lot of work; but so was creating the games.
It felt good doing the "archive" of them even though no one else cares. I suppose it is a bit organising a box of old photos; makes you think about what you have been doing.
I don't understand though why you mention "open source" as a method. Although some people do this, I don't think github etc. should become graveyards of abandoned projects. Open source should rather be a method of developing a project. (When you're done with it put a note at the top of your README.)
WRT to (digital) archiving etc., I'd like to take a slightly different take on that topic: Every project is of limited interest. Sooner or later your interest will wane. Let's organize projects (or rather their digital artifacts) in a way that incorporates this fact. E.g. put all files related to project X, you created this year, into "Projects/2017/X" and create a symlink to that folder in "Projects/now", where you keep your references to projects that you're working on now. No need to archive anything later on. Just remove the symlink.
Clearly that's something that my mind gets interested in around springtime (for no consciously apparent reason). I wrote it in one language in 2014, redesigned it in 2015, and rewrote it in a different language last year. Who knows what I'll do with it this year or next?
I don't purge because I know I'm likely to want to take it up again, or at least pluck part of it out to use in something new.
> Citizen Maths is for people who want to improve their grasp of maths, and become more confident in using maths at work and in life. Maths may have passed you by at school. Or you may be rusty. Maybe youve passed maths exams but find it hard to apply what you know to the types of problem you need to solve now. Problems like using spreadsheets, judging amounts or assessing odds.
> If so, then Citizen Maths may be for you.
> The course is at 'Level 2' the level that a 16-year-old school leaver is expected to achieve in maths.
It's from the UK.
Technology Entrepreneurship is focused on the lean startup. The next session is expected around June.
Venture Deals is sponsored by Kauffman Fellows Academy and TechStars and is all about funding. A new offering just started and you can still join at https://app.novoed.com/kfa-venture-deals-spring17/
Unfortunately all classical long term jobs will not disappear overnight, companies are social constructs because they have customers that are human, they need people they can trust.In addition, the gig economy had frightened many so many people, that they thought that having a university degree is the best way to escape it. So much for the MOOCs.
I think that as usual (and as Paul Graham said in 2012) universities will be challenged by new comers, but for me it will not be MOOCs. Universities are becoming more and more commodities (as reported in another HN discussion which says that the average IQ of the increasing masses going to university, is diminishing simply as the result of the IQ distribution law). Employers will trust them less and less to select the best individuals.
This is not new, I remember during the mid 90', there was a recruiting crisis, there was not enough people mastering the C language, the answer was not to make everybody to learn it, it was to invent new languages (Java/PHP/Python) that were much less demanding and also new tooling (IDE) making it possible for less gifted but more numerous people to enter this industry.
So the next thing will not be MOOCs or more people to universities, but tooling like DARPA's AIDA  applied to science.On a lesser scale, tooling like Galaxy in biology, are excellent steps in the right direction.
There are many benefits for the society at large to create tools to plan, assist, track and audit the intellectual processes, the science replication crisis is a good example.
But when you go back historically, predictions of what life would be like "now" all left out the world changing invention of computers and internet.
There is a scene in the movie "The Graduate" where he is at a party and everyone is telling him what he should go into as his career because it will be big in the future. One person tells him "Plastics!" This was a joke at the time, a ridiculous statement. Years later, the plastics industry used that bit in a TV commercial.
If you really, sincerely believe "The Future is all about X industry," you aren't telling people that on the internet. You are quietly behind the scenes buying more shares in X or getting training to work in X or otherwise trying to make sure you are the firstest with the mostest in X.
Why? Because, web browser is second most software used after operating system by a normal computer users. If you are developer you use editor and web browser, if you are writer you use world processor and web browser, if you are market person you use trading software and web browser and so on. I mean web browser is something used by everyone.
We have written applications ( for computer and mobile device ) for most useful sotware - operating system to reach out our users. Now, it is time to target next software used by everyone. You might create a website but it will only be there until user do not close that tab. But, with extension, you will be in constant connection with user.
Currently thid market is uder estimate as many developer consider that it is not something that consider as programming. But, I think every website specific limit to connect users. and at that situation, add-ons will come to rescue.
The total market cap for cryptocoins will grow from $50 billion today to $1+ trillion in the future.
Augmented Reality, I would suspect in a year or two we will have the first successful product.
Services and entertainment for aging populations.
Real estate auction services, Trump is going to have to sell of a lot after going to prison.
I'm hoping for a market to end all markets, where the product is money. You sign up with a company, it pays you. All anyone wants is cheap, cheaper, free. Getting paid tops that.
So maybe solar panels are just getting competitive, but getting paid to put them on your roof, that's hot.
Turo is hot.
Universal basic income is hot. Maybe politicians don't have the imagination to make it happen, but we do. Secretly every employee in the world yearns to load the part of their job that even a monkey could do into a spreadsheet, go home, and still get paid. Given the permission to automate our own jobs, well do it gladly and in large numbers. The only thing stopping us is really really, ridiculously rich people, and people with no imagination. Somehow we have to find a way to pay them as well, and keep paying them, no matter how much they dont want to get paid.
Also, some form of artificial companionship.
We're going through something similar to the industrial revolution, lots of people will lose their job to AI (or still be employed, but with significantly lower wages - even previously untouchable professions like lawyers, doctors and programmers).
To avoid riots, these people will be fed either through existing welfare programs or new basic-income style ones. But the old guard will want to make sure they don't blow their money on hookers and blow and booze, so anyone who peddles "here's how we can figure out which of the welfare recipients is non-compliant with their spending habits" is going to make a killing.
Sad, but inevitable in the current political climate.
Have you sent someone money internationally before? How about across different banks? Typical transfers process at around 3-5 days. With the help of cryptocurrencies like Ripple, Steller and the like. Transfers happen in seconds. This will grow because now, banks will utilize this technology to get rid of the old one (Swift anyone?) and will save banks lots of time and money.
The market will grow from zero to millions in this time, but it will be entirely consumed by one of the big five and everyone will just think of it as a Google feature or something.
consumer internet privacy and security (think barracuda for the home market -- above and beyond a standard router/firewall possibly with active L7 features)
consumer and enterprise storage management (they literally can't even make enough ssd's right now, people and companies are hoarding data and can't manage it effectively or reliably)
rural and wilderness area wireless internet (people will start moving out of cities again and will want the same > 50 megabit low latency service).
Personally, I got a Parallels VM running on my Mac with Windows just so I could use "OneNote 2016". Many more features including deeper organization and custom tags.
In general, as long as you plan it out properly, hierarchical organization tends to be superior to tag based organization, and "OneNote 2016" (and even the other version) are really good at hierarchical organization compared to say Evernote.
It doesn't seem like it would be that difficult but it hasn't happened yet. People seem to start replicating org-mode, realize how many complex features there are and give fall off before completion.
Having said this, the actual challenge for me lies in deciding what notes are actually worth storing. I recently browsed through the hard drive of on old laptop and was astonished to find out how maybe 95% of the notes were completely pointless. I guess a good deal of notes are only important the moment you are writing them down (to make something clear to yourself). In other words, much could have been written directly into /dev/null.
There's also an iOS client being worked on as well.
I tried OneNote, but it didn't stick.
I've been using Bear (Mac platforms only) and have really liked it so far. Free to use, syncing is $1.50/mo. Evernote migration worked pretty well for me.
I don't personally have a need to save or insert data, images, or other content. If I really need to I'll insert the online URL or the location on my server in the note. Which makes a basic solution the best solution for me.
I also use iA Writer on my iPhone synced with iCloud for on the go access, and writing *nothing personal/private for security, secure notes are encrypted and accessed online or I use a physical air gap between machines I need it on.
Officially: MyPost is your post, your content. Create beautiful web pages in minutes for free. Whether you know how to code or don't know how to code at all, MyPost is for you. The combination of HTML, BBCode, and various font icons will allow you to write professional and personal posts in no time. No experience necessary!
I shared it with the world... and people have taken a liking to it and found their own uses for it too. Completely free. If you decide to experiment.. hopefully you find a purpose for it.
PERSONAL - I also always switch but Evernote has worked for the last year. here is my sample setup (although I do not swear by it similar to my work structure). I dont like post-it notes near my home rig ; ). Here is a snapshot: https://www.dropbox.com/s/tlnzut54agbycnh/notes_screenshot_f...
I just find that the wiki format works really well for me.
Work / Projects: Workflowy. Each project gets a dedicated top-level folder in my Workflowy account, and under that are the (Diary) folder for chronological records, and various non-chronological / accumulation folders for things like (Site), (Marketing), etc.
- Sublime Editor + Markdown + (private) GitHub repository
Some larger ones graduate into a .txt file which go into a iCloud folder.
I push the repo to a server I own on the net. If it has secrets, I gitencypt it.
I'm curious to hear what's everyone's workflow
If it's valuable it would end up as git committed record in sqlite Trac database, and simply erased if not.
- simple interface
- can access it on multiple devices
- can set time/location reminder
- can pin/set color+picture for each note
- checklist, audio note, etc.
For other notes I just email myself. I like email as a format. It's accessible on all platforms.
Work hard, accumulate skills, and become better at your normal job. Even if you're not writing open source software to help local governments in third world countries have free elections and fight malaria or donating 50% of your salary, you're creating value and "bettering our species" just by doing something that someone is willing to pay you for. In fact, that's how most of the world's wealth is created.
Not saying you shouldn't volunteer or donate your salary (I personally try to donate a decent chunk of my salary to givedirectly) but -- unless you're a nigerian hacker or malware developer or something -- just because you're getting paid or working on something that isn't an absolute necessity doesn't mean you aren't doing social good. Just something to think about.
There are also organizations like Code for America that do open source work with local governments. Since those projects are open source, you could probably volunteer your time and contribute to those. Or simply volunteer in a non-developer capacity! :)
Doing actual social good -- helping people in ways that will actually solve their problems, understanding the consequences of changing their lives -- requires a ton of context and communication. I think it's very, very difficult to do so without either dedicating most of your time to that cause, or working closely with an organization that is already doing so. (E.g., volunteering for a food bank is a lot more effective than just picking up food and distributing it on your own.)
That is to say, provide email services that don't mine data for profit. Provide a social interaction space that doesn't attempt to manipulate moods, opinions, or sell its user's eyeballs. Provide an aggregation service with strong filtering tools in place of strong moderation. Provide a code repository with great tooling that doesn't include value judgements. Provide anonymous, secure communication between parties. Make mobile applications that provide wanted services without the in-app purchases, ads, or profiling.
The downside is that you're unlikely to get paid for it. You'll probably even lose money on it. In some cases, you'll even face legal pressure to stop or change.
The basic idea is to bring together a person who knows of a specific social issue, and a tech person who wants to help solve it. Together they are the core team and are helped to work on their project, form a non-profit, get conmections etc.
At the moment the program is piloting in Berlin. It's planned to expand to Hungary, Austria and ideally other areas. If you are interested, drop by at one of the barcamp/unconference events or check out the website. :)
If you can take away the need for millions of dollars to run a campaign then policy makers aren't beholden to the few wealthy supporters that helped get them elected.
They help connect volunteers to projects that range from building an open-source voter database to an Uber-like app that helps the mobility-limited get transportation to vote. They are extremely transparent and always interested in growing the network. Many members of the network are engineers, product managers, or independent coders.
They have a bunch of interesting research, online articles, guides, and a book. The entire website is focused around how to make a difference with your career in a way that aligns with your own goals. It's a great resource.
1) https://cyclebath.org.uk/map/ This one has gone national and is up for a Creative Bath Innovation Award.
2) Using Census 2011 Data I've created a healthy cities and towns league index as well as spatial analysis on commuter behaviour. (6M people drive to work, of which 3.5M live within a 20 minute cycle ride) https://drive.google.com/open?id=0B4YARJgso6IxRjd1ZlNDZklGaX...
3) Worked with Bath Hacked and Strava to deliver a year of cycling in the city of Bath strava.bathhacked.org
4) Get involved in your local tech4good meetup.
Do not start from a "hey where can I use my skills for good?". Start with "I am passionate about X, what can I do to help X in anyway?"
Open source, modern software for charitable hospitals in the developing world.
Find some open source projects for some issue you care about. The medical community could use a lot of help, anything that automates some part of their job means medical staff is available to help more patients. There's a lot of room for automation in this field.
Personally I think anything in renewable energy, sexual education, and poverty alleviation are good highly effective causes to get behind as well.
Other than maybe e-mail, wikipedia is the best thing to come out of the internet. And its creator may not be a billionaire oligarch, but he has a GREAT life. If you can set aside a need to be filthy, needlessly, pointlessly rich, then maybe turn your next idea for a social network or a communication platform or whatever into a non-profit. It's amazing what types of products can be built for this world when you're building for the world, and not the shareholders.
My first answer is to develop your skills to the point where you are strong on design and UI/UX, not just coding.
I say this because we've worked with some people who have this ability, and they're extremely effective as activists once they focus on a mission.
Aaron Swartz is one person who had this ability, but you don't have to be a genius polymath to be good at this, and Aaron wasn't amazing at visuals and design either. (He was good enough at it though, which was what mattered.)
Ideally, you should be able to speak persuasively online, using text, code and design creatively to get your message across. But as a minimum you should be able to build a prototype from your own vision, get the UI/UX to a point where you're happy with it by iterating, and QA it yourself.
There are a few reasons for this, but the main one is that most social change gets done by small groups of people, and many of those people aren't technical. And usually it leverages certain moments when people happen to be paying attention, and makes the most of those. So you won't have a big team, and being able to do most things yourself lets you respond quicker.
If you have that, I'd try your hand at working on some issues that interest you, either directly, or showing up at an org you admire and seeing if you can help.
We're setting up a space for volunteers, and also a YC-like fund for new activism projects that emphasizes the need for technical founders: http://fightforthefuture.org/ateams/
My company, www.grove.co, strives to help families making it easy to buy sustainable products vs. conventional CPG. It seemed a bit crazy when we started, but now literally thousands of families get sustainable products from us every single day. It's hard to make a big impact on your own, but organizations and companies can do great things.
They organise different types of projects: DataDives, which are hackathon-type events and focus on data exploration and analysis; and DataCorps, longer term projects (a few months), where a team of volunteers will team up on a more project for the client charity.
They are looking for volunteers for a wide range of roles, including data scientists, programmers with experience with ML, dataviz experts, project managers, etc.
First, one of the best ways to do social good is to fight capitalism. Just by working at a worker co-op, you're doing this. Many tech co-ops are also built around resisting other oppressions like racism, patriarchy, etc.
Second, many co-ops (e.g. http://sassafras.coop, the one I work for) work on lots of social good projects.
A lot of these social good things need people to get involved, not software to be written.
Anything that helps feed people well or better, promotes germ control, reduces social friction in some way, helps marginalized peoples earn a living or helps people of limited means access basic decent housing promotes the social good. But those things are often not the heroics people have in mind when asking this type question.
That sounds vague, so an example might be nice. I travelled to Oaxaca recently and toured around a bunch of palenques (mezcal distilleries) to see how folks did their work. It sounded like there's an enormous problem with overcultivation of maguey a plant that needs 30-some years to mature in some cases. I thought maybe an app that could identify + track maguey would help. I talked about it with folks, and realized that the problem isn't that they don't know where the plants are, or that they don't know how long they should grow for. It's that there's too much demand for what the ecology can bear, and a lot of it gets carted off to Jalisco to fill tequila bottles before it's mature.
In that light, an app for identifying + tracking maguey isn't really gonna help. But now I have the contacts, they know I want to help, and we can keep talking about what they're working on. Maybe it'll line up. But it's uncertain. And frankly, that's how this stuff works whether you're building something in the hopes of getting into YC, or building something to help out humankind. Just because you can earn a paycheque writing code doesn't mean you can identify and fill a new need with that same skillset.
Said that, you can also think "smaller". Teach someone how to code, and it might be a complete life changer. I run a coding school and we offer free sits for people who need it, and we're greatly satisfied. We've seen students working for McDonald's, for 10 hours per day making just minimum wage, move to a software company with a $+90K salary and changing their lives completely.
Share what you know, try to fix the problems that humanity faces. Don't try to do everything just by yourself. But your "tiny" collaboration ads up.
They talk about using the metric of "how many lives can be saved" with your cash.
People admire doctors and rescue workers and marvel at the possibility of saving someone's life -- something that few of us would ever achieve. And yet at the same time, we routinely hear that for a small sum of money we could save someone's life in a developing country and this scarcely impacts our behaviour. There is an important disconnect between these two attitudes and it has serious moral implications. I will speak about the evidence which shows that we really can make a tremendous difference by giving, and then explore the moral case for giving much more than we typically do. I will then look at the great disparity in effectiveness between different charities and show how choosing where to give can be even more important than the decision to give in the first place.
For us we wanted to help people who were skilled, but ended up washing dishes, as they did not understand the Danish culture. We made NemCV.com to make them CVs in 2011. The website is now defunct, but since we cared about helping people we turned into a real life event to help people and has helped 1000s of people into a better life here in Denmark, and continues several times a month to this day:
So, find the problem first, and then spend time helping and make an IT tool IF needed!
The big focus is helping students identify and fix mistakes in their code in a friendly and approachable manner.
It's not glamorous, but if you're willing to volunteer your time helping with an org's Wordpress site or making sure everyone is educated about phishing and 2FA, you can make a meaningful impact in your community.
That is to say, there are probably hundreds of things, off the top of your head, that bother you and probably bother others. To the best of your ability choose one that you have a clear "thread to pull on" - as in, there is an action here you could take that might not be elegant, might not scale, be politically heated, or put you in a position beyond your understanding, ultimately require a team or need financing. But you could do it NOW and not just dream about it, consequences be damned. When the potential is scary like that, that means you actually hold a lot of leverage to unleash new forces, just by starting on it and not stopping.
Most of software isn't like that: it's predictable in its design, it automates a thing that was done slower or less effectively before. It fits into the system and stays within the lines. So you also won't find many examples for the particular thread you're pulling on, and that's expected.
If you do this and it's something you personally care about and will pour heart and soul into, you're doing about as much as anyone could hope for. You won't and can't get all of it right - but what people need isn't perfection, so much as a vehicle that will last well enough for the journey.
Open source tax-calculator for tax policy analysis. Used by many policymakers to inform their decisions about tax policy via the TaxBrain GUI (https://www.ospc.org/taxbrain). Influences decisions that affect hundreds of millions of lives.
Luckily, these days there are an abundance of ways you can 1) make money, 2) work on interesting problems, 3) work with amazing people, and 4) do social good. You used to have to choose 2 or 3 of those things, but no longer. I run a nonprofit organization that highlights these opportunities: http://impact.tech/
I also run a VC fund that supports these sorts of startups. You can see an example of the companies we back here: http://www.fifty.vc/companies/
If anyone is considering jumping into the social impact startup space, feel free to drop me a line and I can help you navigate the opportunities. First name AT the URL of the nonprofit I mentioned.
Teach Python to girls in Zimbabwe: https://www.zimbopy.com/become-a-mentor
However, you can still make a big difference for groups much smaller than the whole species (and I think that's actually preferable from a human point of view because it's more tangible). The world is full of problems that could easily be solved by good software. This is especially true in industries that are usually not very technological by themselves.
Depending on your current network you might have gotten to know an industry or two that is not strictly technological. If not, ask your friends who do not program software all day and ask them what problems they have at work that they find annoying and try to come up with a software solution for that.
Once you do that, convince their bosses that it saves them more money to pay for your software than to do things the old way.
"Fixing world with software" nowadays cynically means just "to build closed platform and seek for rent".
The goal is to help humanitarian organizations solve technology problems with open source solutions. This excellent group of people are developing solutions to common problems like logistical, and communication issues that help improve humanitarian aid.
You can see the source code on their github:https://github.com/htbox/
If you are interested, you can hear more about it by listening to Richard Campbell on this podcast and many others like it: http://www.podcastchart.com/podcasts/herding-code/episodes/h...
Don't work towards maximizing the utility of everyone, it's nonsense. People aren't that cooperative, even. Work towards bounding the minimum utility. There's lots of social and physical extinction events that humanity faces. Even if you have nothing directly to contribute to these problems, perhaps you can realistically contribute to the welfare of other people who are contributing to these problems.
Free phone operating system: https://www.fsf.org/campaigns/priority-projects/free-phone
Decentralization, federation, and self-hosting: https://www.fsf.org/campaigns/priority-projects/decentraliza...
Free drivers, firmware, and hardware designs: https://www.fsf.org/campaigns/priority-projects/hardware-fir...
Real-time voice and video chat: https://www.fsf.org/campaigns/priority-projects/voicevideoch...
Encourage contribution by people underrepresented in the community: https://www.fsf.org/campaigns/priority-projects/contribute
Free software and accessibility: https://www.fsf.org/campaigns/priority-projects/accessibilit...
Internationalization of free software: https://www.fsf.org/campaigns/priority-projects/internationa...
Security by and for free software: https://www.fsf.org/campaigns/priority-projects/security-by-...
Intelligent personal assistant: https://www.fsf.org/campaigns/priority-projects/personalassi...
Help GNU/Linux distributions be committed to freedom: https://www.fsf.org/campaigns/priority-projects/help-gnu-lin...
Free software adoption by governments: http://www.fsf.org/campaigns/priority-projects/free-software...
But in my ten years' experience, here's what I see as the biggest potential for tech for social good: open data standards for constituent communications. Breaking public messages out of the current silo's of individual e-mails, e-petitions, social media, civic tech apps, and issue advocacy platforms. Making possible open structured data on real public priorities and policy preferences in every Congressional district. This never took off because government offices haven't wanted such a level of participatory democracy, and because existing advocacy groups haven't wanted to share membership lists and enable peer-to-peer organizing - it would undercut the business models of e-petition companies and legacy advocacy vendors and VC-backed civic startups. But making public opinion info more free and open for analysis could push forward reforms that have wide support, and are stymied by the current U.S. two-party system: http://www.participatorypolitics.org/open-data-infrastructur...
There are a ton of projects you can jump on aimed at helping to get progressives elected and enact progressive policies. For those not familiar with progressive politics (or at least not beyond Bernie or whatever), the basic idea is to make it easier for people to get involved with government. For example, making it easier to to figure out which elections you're eligible to participate in as a candidate and/or as a voter.
We have a yearly, paid, 5 month long fellowship in Brooklyn for mid-career engineers, designs, and product managers that combines human centered design and Lean Startup to build tech ventures that fight poverty.
https://joinpropel.com came out of our fellowship and just raised a seed round from Andreesen Horowitz.
Our website: https://labs.robinhood.org
I'm working on the 1st live online school that teaches kids to code. It's nearly impossible for parents to find teachers locally between 4-7PM, especially at a reasonable price, so come help :)
Check out the documentary Cowspiracy (free on Netflix) to see what I'm talking about.
I personally have been at Chimp for over 5 years. I can tell you that its a pretty amazing feeling to come into work every day, sit in a comfy chair, wiggle my fingers on a keyboard and, as a result, help get hundreds of millions of dollars flowing into the charitable sector. All while getting paid a competitive salary at a stable company thats poised for massive growth.
If this sounds interesting, checkout https://chimp.net/careers or email firstname.lastname@example.org if you dont see a role posted that matches your skill set. Again, well always connect with talented people that we think we can work with.
I'll take this opportunity to float an idea that's been kicking around in my head for a long time.
The premise is to:
1) (this is almost certainly the easy part) build out a platform that is like a two-way khan academy - teacher and student, with at least the teacher having a tablet and a stylus that function well, sharing a digital blackboard, with a video chat optional -- where a student of something in a relatively privileged situation teaches a student of the same thing in a relatively less privileged situation -- where the sessions are stored and rewindable, both video and blackboard input.
2) the hard part; selling it as something to invest in and driving it to a point of having an endowment behind it, like Harvard's endowment, that allows the service to pay for moderation of student-teachers something like $12.00 USD an hour to teach, while subsidizing well-chosen students to have to pay something like $2 an hour to learn
it's been an idea for a passion project for a while
A recruiter shot a job across my email a few months back about using technology to get people more active in government. Depending on how you feel about government, that could be taken to any number of applications, with some company filling the niche along the way.
I work in education, myself, and I find that pretty rewarding. Being able to use technology to help teachers do something even a little bit easier is a good feeling.
Even though these scenarios are very different, they all help advance individuals and the species in their own micro and macro ways. Tech is useful everywhere, so decide who you want to help, and find companies that exist to help those people and go from there. And if you don't find a company there, then maybe you have your YC interview already cooking.
Disaster Management SoftwareEMS SoftwareAssistance software for the blind,deaf,etc.
Of course, not everything becomes magically better from software's involvement. There might be some good opportunities in robotics, robotic medical care and elderly care especially come to mind.
We make software which facilitates the organ, tissue and eye donation process in partnership with a number of other organizations and non-profits. It's really rewarding work.
Sometimes our nonprofits post iOS/Android prototyping projects, for example.
Feel free to let me know if you have any questions, on HN or by email at sdimantha(at)petersonhealthcare(dot)org.
Here is one of the engineering roles we are recruiting for (more to be announced later) - http://petersonhealthcare.org/careers/software-engineering-t...
I have a list of resources that I collected while I was searching as well:
- The Fast Forward accelerator's tech nonprofits job board and directory. This is easily the most extensive list I found: https://www.ffwd.org/tech-nonprofit-jobs/, https://www.ffwd.org/tech-nonprofits/
- The YC-funded non-profits (subset here https://github.com/smartergiving/open-data/blob/master/v0/fu...)
- The well-known non-profits: Mozilla, Wikimedia, Khan Academy
- Code for America is hiring, takes fellows, and has a government job board: https://jobs.codeforamerica.org/
- Tech co-ops: https://techworker.coop/members
- Angel list nonprofits: https://angel.co/nonprofits
- Some other random social good orgs that I found were hiring in the SF area or remote: Open Whisper Systems, Binti, Nuna, The Human Diagnosis project, Bayes Impact, Nava, GovEx, Democracy Works, The Guardian Project, The Internet Archive, EFF, Exygy, Open Law Lib, Angaza, Fight for the Future,
- An article written by the co-founder of Bayes Impact for techcrunch: https://techcrunch.com/2017/04/25/a-call-to-action-for-tech/
- Civic Makers (http://civicmakers.com/) has a newsletter highlighting civic news
I also second the progressive coder's network.
I'm currently working on version 2 which returns a lot of stastical information, allows for graphs and better statistics to be shown on stream overlays and a back end console for auditing and reporting purposes.
I am currently breaking up each part and exposing them over HTTP APIs to allow future integrations and to allow the system to scale for large streaming events such as Special Effect's Gameblast.
The gaming for good initiative is ripe for new tools and services, as there are very few players in this space, to the end where I thought that I was the only one with this idea up until a few months ago.
Our current volunteer developer initiative is called Voices for Democracy, and is focused on creating tools to advance the discourse between people with their elected representatives.
If this excites you, or if you'd like to learn more about other opportunities to use your skills for good, check out twilio.org and send us a note.
Thanks for starting this awesome thread.
-Jacob from twilio.org
If you have time, you can also build a useful side project.
For me -
Youtube and Reddit give a lot of weight to popular content. If you're trying to learn new ideas, videos with conspiracy theories, popular speakers, and things people already know dominate search results / subreddits.
My project (https://www.findlectures.com) recommends high quality content, but across as much topic variety as I can find (discourages ignoring speakers based on demographics or them not marketing their talks well).
We believe that peer-to-peer, community driven, education is one of the best ways that our small team can meaningfully impact the world.
The more effectively we can disseminate meaningful information, while also building connections between people, the easier it becomes to solve every other world problem.
Always looking for more collaborators, so feel free to email me: John@helpwith.co
There's some important things that can make a lasting difference, beginning with ensuring there's something you care about, possibly obscure, but important, for possibly a long time. A big part of this is learning about what the issues are and their impacts.
To help pick a problem or area you care about.. there are things that you are naturally drawn to and can't help yourself with.
It's not a bad place to start looking for problems (and other people trying to make a difference) you care about and want to add value to is an important consideration.
Why? The most important thing I experience is the importance of always adding value first, and finding a way to do it. It simply opens more doors and opportunities than anything else I've ever experienced.
From a tech perspective, many social enterprises, groups can benefit from basic mobile apps or tools for the people they work with. The skillset here isn't the hard thing to find, it's a willingness to learn and only then solve problems even if they aren't new or interesting but deliver great value.
If you can help someone save a few hours a week with 10-15 minutes of making an excel sheet, it is a greater help and a start.
All big problems begin as and consist of a lot of smaller problems.
A secret of finding interesting projects that can grow, is that the willingness to solve small problems, because small problems leads to large problems on their own. Almost all of my multi-industry experience is due to the transferability of solving similar problems.
With this in mind, social good can happen independently, with a group, from an initiative at work, and not just exclusively from working with non-profits. Help where no one's helping and you'll find lots of opportunities to add value.
Then go to video 20 (friday night firetalks) and skip forward to 1:31:55 theres a talk called "You can do the thing".
tl;dw - Theres a lot of help that can be done by finding local orgs that you agree with, and offering to modernize their websites, help manage IT, and so on.
It would be interesting to point at the genes for the heritability of IQ for giggles. We are all data, the meat is what matters. The life you save may be your own.
We measure paper consumption for businesses, equate that to forest impact, then automate the planting of those trees back into the environment at planting projects around the world. We're always looking for talented designers and developers that want to do social and environmental good through technology.
I myself, work mainly on projects related to museums, culture, green economy... In the projects I accept I try to find a balance between money I can get and how I view it as work for the greater good. A very hard balance and a very subjective one.
Also have some friends that are a lot into open data which is also an interesting area to explore.
so, I'm trying to help people make cognitive and behavioral improvements in their lives with my side project (http://willyoudidyou.com)
"Data science competitions to save the world"
OK, the tag line might be a bit much, but here's a snippet from one of their current competitions:
Your goal is to create better models to estimate populations for hard-to-reach sites in the Antarctic, and thereby greatly improve our ability to use penguins to monitor the health of the Southern Ocean!
I personally think we need better ways and more people to know about better ways to aggregate social preferences. If people knew about alternative voting methods they might entertain using them. You could work on coding implementations that would introduce the masses to alternatives.
The idea you can _do anything_ to _help_. Is mostly a myth people repeat so they don't constantly feel like shit for doing nothing in the face of mass social injustice by which they are (partially) the benefactors.
If you want social change, you need social action. Anything short is just rationalizing your guilt.
* Program for charities* Make Reddit style voting for political topics* Invent an econmic system that saves the planet* Work on blockchain projects for good for all* Contribute to open source projects
An open source tool to help engineers install renewable energy equipment offshore. Wind, wave, tide (one day!) etc
Educational tools are also good investments of time, IMO.
Don't know if it's still active, but the idea (and the founder) behind it was really about making the world a better place.
Check out: https://gazaskygeeks.com/
And I'm pretty sure most of it would fly in the face of just about every conventional human morality (which comes about largely for self serving purposes in my opinion).
Our horizons of view are necessarily limited by the narrow slice of space and time we occupy and the culture in which we come to conceive the world. We can break out a little from time to time but for the most part we can't separate our innate ideas of "social good" from that which more objectively probably is better for the species.
I understand the sentiment. I thought about it a lot. As I got older I realized the important things in society are the little things. We are individuals, there are millions of us. We generally won't dramatically alter the course of history but the way we treat others personally, the way we conduct our affairs, our character as individuals, that's what makes up a society. We have to eat and drink. It's part of life. So we sometimes have to do things that we'd rather not. But we can try to minimize our negative impact.
Also I think we partially got where we are right now because some of our ancestors were basically beasts who killed the competition and took their women. And if that hadn't happened at some level regularly we'd probably still be swinging from trees and eating seasonal fruit. I'm not sure I want to know what the implication of that is. But I try to live in peace and stay balanced which means not worrying about saving the world all the time. Because it truly cannot be saved but maybe you can be. And a few others.
Simple, but takes a lot of time, patience, listening, and humility. You can't go in thinking you have the answers, it's got to be a collaborative process.
As an individual how are you doing? Is your life in order? You're doing OK, those you love are doing well, things are good?
so, your problem was: your data before decision were not enough and the analysis of the situation (in the whole world) not deep enough.some people will argue: so much data - never possible to make the best decision.I agree with it.But you can do some approximation and before doing an (also only aproximated) List of "good, selfless, altruistic" destinations (with view of whole world and view to some influence like climate, politics, geophysics, space-riscs ... and so on.) make a risc and a potencial map about the world. And second part construct your own priority List for this risc and potencials. Big project - but also big fun! So go web and search for science studys, travel around the globe, talk to many people, educate kids, help older people with desease - so you get a good (eventually excellent) database.Work out a mind set of gouls, of answers for the question "what is good (for my neighbor)". Your longtime values.But you will not forget the borders of your brain: for example - you are a good coder and engineer, and not so good corner speaker ...so go politics as job would not good decision, because your influence will go zero and as coder zero++ ... ;-)But you will not forget the borders of others brain: for example - you everytime check different (also antagonistic) sources of the data for your decisions. And if somebody troll you - be calm: very good input for your decision - database (part:psycho-problems)!
And think of the time of your live: its all in move, you must check in some weeks or months again and again, the same procedure ..(Will be fine: DO WHILE(true))ask, analyse, check, do - a simple and fine procedure in a endless loop: your live.and the backup loop is: ask one more question everytime, everywhere - to everybody ...Find the position were you with your (everytime living) "database" can make the most influence to the "problem-vector" of the world.then so you also will make some mistakes, errors appeare again and again, BUT:then you are old and grey you can say:I had done best of my willnes, my power and what my brain was able to think:attempt(sic!) to change the world to a better one.A (only limited) list of my own tasks (differ already to the list of my son, friends) :- participation, transparency with (for example) openData Apps -- networking: bring together good coders amd other- identify deficites in care for older people - organise help and also change of the reasons- ... and so onthe list is under construction and any bugs I must find out next days ... ;-)Wish you a good and viable decision for your dream - job!CU
Ps.: In tech & programming specifically, I think Free Software is a beautiful idea.
Ps.: I`ll add, why I think this is(my original point), is that I think it's very nice to understand(or try to understand) what is the `structure/mechaniscs of the world`, I mean, to me it would be the same to study capitalism as it is to study anticapitalism(that is, the more you see how it works, the more you`ll see stuff that is flawed), some would disagree with this, of course. Contrary to what many think, ideology to me means NOT seeing reality as it is(so I'm not talking about intantile, superficial, ideas/agenda here), so I think it's absolutely fair the everybody should take some understanding of it based on people who wanted to figure out found out, even if not 100%. Since the more correct is your model of things, the better you can act on them(you can't engineer a car with wrong math, for example). To me, personally, getting my mind out of the techie neophile mindset and knowing broader and deeper stuff gives me plenty of ideas on things to do. Even more so, that since I'm using this 'footing', I can then try to see if it matches reality and goes on to have real-world effects! ;P But anyway, what I`m saying is sort of a longer road, to try to get interested and understand other topics and then look to your habilities and see what you can do with them about the other thing. That's where the project I'm trying to work on came from and it's really meant to be a drop in the ocean and a simple program etc, but it's something I really care about since it's tied to deep layers of my person and perspective on `world`, `society`, `individuals`, `species`, etc.
I've been logging my caloric intake since 2009. Logging my food keeps me accountable for what I eat and forces me not to eat so mindlessly and without knowing what I put into my body. While I don't usually go back 3 months from now to figure out what I ate or whatever, in the long run, I am able to use the long-term data to understand my eating habits vs. my weight and BMI.
The answers would be highly dependent on the specific service, and whatever capabilities they offer. Firebase, for example, has a concept of custom tokens where you could implement rules on a per-api-consumer basis.
There does seem to be an opportunity for CDN companies to offer an API gateway with throttle, scripting, oath, conditional caching, bot blocking, etc. I don't know why they haven't offered yet. A CDN hosted Tyk or Kong instance would likely be popular.
It is the root of many of our difficulties in programming.
If we create very good "program editor" (not text editors) and store our programs as a data object in a database a lot of our current "problems" automatically vanish.
Every node of the program will have a unique identifier so the editor can keep track of it across the lifetime of a project.
We will get automatic version control. Syntax war will end because you will be able to customize the syntax exactly how you like.
The editor can track the association between tests and documentation with the objects in the program.
And so much more. At the moment we share an ASCII language with the compiler. This creates a fundamental tension between the human and the computer.
On one hand we want to specify lots of things about our programs to make it more maintainable and reliable on the other hand we want to keep things easy on the eyes and parseable.
So we create a strong dis-incentive to providing information about the code to the compiler.
Because all we have is a single layer of text which will quickly become polluted.
We need our programs to be able to have lots of meta-data but have an editor that is capable enough to allow us to view what matters at a given time.
This can only be achieved if we stop thinking about programs as lines of text, but rather as data objects.
This is known as "Intentional Programming" if you are interested search for it on Youtube.
Also see Isomorf.io for a basic demo (https://www.youtube.com/watch?v=awDVuZQQWqQ) (I'm not affiliated with them).
Depends how fast automation/AI will grow within the development field.
I wouldn't charge separate rates. As soon as you do this, you open yourself up to needless bickering about how much of your time was spent on x vs y. It becomes complicated to separate sessions that are programming intertwined with technical discussion.
Because my rate structure is simple. I can describe it easily: W per hour/day. X markup on expenses. Y per mile travel. Z as retainer applied against final invoice based on my non-binding estimate of the time it will take to do the project based on the client's description (often Z is from 25% to 50% of the initial non-binding estimate). Most projects take at least K hours/days.
I don't wait for a potential client to bring up rates. Once it is apparent that the person is soliciting services, I describe my rates. This avoids wasting both our time when there is a gap between a potential client's economic expectations and my rates. It avoids wasting my time with potential client's who balk at writing me a check to get started...willingness and ability to pay are features of a good potential client. Execution of payment is a better criterion than a signed contract for separating actual clients from potential clients. A reluctance to pay me is a good criterion for distinguishing bad clients.
To put it another way, the essence of consulting is the business of "nickeling and dimeing" clients. And in general, charging money is the essence of business. A reluctance to charge people money is not wrong but it is at odds with trying to run a business.
The flat rate up front replaced my previous system where I would tell the client that I would follow up with a proposal and then spend time researching and pondering and estimating and then putting together a document and then waiting for the client's response or non-response.
I have made the mistake of not charging in the past, and I don't technically charge to read or respond to emails, though I might factor in some of the work - at least - say something takes me a minimum of 25 minutes to do, I will charge an hour of labor because I've had to take some time out to understand their email and clarify that the work they want is accurate from the information I understood it to be.
In this fast-paced world, meetings can eat up a lot of [your] time. And sometimes you do get those clients who want to meet you in person or they always want to talk to you on the phone. I had one client who kept wanting to meet with me every single week, and I lived close to her business, about 15 minutes away, and the first two or three times, I did not charge her for it. I was naive and just happy to have her as a client, since her business was popular in town. It got old real quick. I decided to charge her her for those meetings, which usually lasted anywhere from an hour to two hours. Once those charges came, the meetings switched over to email or a very brief quick phone call real quick.
I have since trained my clients to send email. Paper trails are much more accurate than in-person meetings or phone calls. They protect me and my client so there are no misunderstandings of what was said vs. what was heard. Clients will usually send me an email with work they want or need. Before I start any work, I normally reply back and inform the client: "Please confirm by replying that it is okay for me to begin an invoice and work on what you want me to do. You will be billed at my normal rate of X per hour."
This confirmation they reply back with is an email of their recognition that I am doing work for them and my billing has begun. While I've never had issues, stating your business clearly of what you are doing, what you are charging, and them agreeing to you doing it, is for your own protection and theirs. An email can protect you as it can serve as a legal contract in the court of law.
After that, any significant time is billed, and labeled so they can see where the time (money) is going.
Don't overwork. Seems obvious, though it's not only still prevalent in America, but more important for our field. Working extra hours has rarely benefitted me either in quality of work or in company treatment. Nobody cares that you put in extra hours. In fact, don't expect your boss to care about anything you are doing even if they are generally benevolent.
Your success is mostly dependent on your personality with appearance as a close second. That's not to say you won't have big wins with the projects you work on, but a lousy programmer won't get fired if they are charming and everyone likes them. The more I refined my social skills, as well as my grooming, the more my minor achievements would get overinflated by my peers and the more they would overlook my mistakes. It's just a cruel fact of life, but at least it's something most people can actually address.
* Salary compression is real: most companies are not going to keep giving you raises to match what the market would give you for your skills. They would rather you leave and take all of the institutional knowledge with you than pay you the amount you could get elsewhere. Even if that means hiring someone else at market value.
* Don't get comfortable at a company to the point you're not getting new experiences and learning new skills. Don't become a dinosaur.
* Even if you don't want to become a manager, when the time is right and you have the right skill set, demand a title with "architect" or equivalent in it. Titles are B.S. but people listen to developers with "architect" as part of their title. I insisted on the title and now I'm being recruited for much higher salaries even though I had the same responsibilities as a "senior".
* Good local recruiters are your friends. They can tell you salary ranges for a job and they do a lot of the hard work for you.
* know how to calculate your contract rate if you're doing contract work. Your rate will be different if you are a W2 contractor vs a 1099 contractor. Take into account self employment taxes (1099), the lack of PTO, the time between contracts etc.
* Whether you are a contract or perm, realize that you are still your own company. Your employer is your customer. Do you your best work but never feel a sense of loyalty that keeps you from jumping ship for higher pay. They don't have any loyalty to you.
It's easy for us programmers to become fixated on using a newer JS framework, a slightly tighter Java loop or the latest cool language. Took me a few years to realise that even though I care a lot about those things, other people do not. They are interested in the outcomes, not how it got built.
I'm running my own business and building things for myself these days. I use vannilla JS on the front-end and Java 8 on the back. Since I gave up chasing the new cool tech I have built a bunch of stable systems that have been great, well received, products.
If you become someone who has a history of shipping things that work, you will do a lot better than someone who knows how to write hello world in every JS framework.
Solve real world problems. Doing elegant thingsis very difficult because the real world is much more convoluted than theory.
Do a few things in depth. Don't jump at the latest thing every few months.
If you really need to make software (like I do), make your own company and license/sell your work instead for >500% more than what would be your salary.
Your code will be in production either much longer or much shorter than you think it will. The 5 lines of code you spend three days perfecting will be replaced in a week, and that one-line 3am hack will be out there for ten years.
A good walk around the block will help you solve a problem faster than staring at code.
Find someone smarter than you and learn from them. The corollary is if you're the smartest person in your area, you're more likely to stop learning.
What the customer needs is rarely what they say they want.
You will derive more long-term benefit from finding an answer yourself than finding that answer on Stack Overflow, at the cost of time. When time matters, at least try and understand why the Stack Overflow answer is right.
Don't be afraid to question a decision you don't understand, or don't like. At best, you'll get either your mind or the decision changed. At worst, you will learn something about your co-workers.
There's never enough money, time, or domain specific knowledge.
Office politics matter, regardless of how much you wish they didn't.
0) Nothing is too hard to do, no matter how much those doing it might seem like towering titans many levels above you, or how out of your reach it may seem. Nothing is too hard, there are only things that take time, and things that take more time. If you put in the work, those titans will be your peers before you realise it. Of course, you can't do everything. If you want to put in the amount of work needed for some things, you need to focus. That means deciding to not do some things that you want to do.
1) No-one who is serious about programming gives a shit about language wars, they're for fanboys and spectators. People who get shit done are too busy to spend time on that. So don't sweat what language you choose (too much there is still such a thing as the right/wrong tool for the job) and especially don't worry about the people insulting it.
2) If it's not constructive practice, you're wasting your time. I spent too much time - literally years - spinning my wheels, writing code but not getting any better at it. Make sure you're reflecting, make sure you're improving.
3) (related to #1) seriously stop worrying about choices and just get something done. You don't get things completed by worrying if you're using the right language/framework/library.
Unfortunately I worry that this advice would send me down another bad path and I'd probably need to add on something like:
4) All that said, some languages really are limiting, either in what you can do, the level of concepts you will learn, or straight up teaching you bad habits. Likewise some libraries / tools / frameworks are actually bad. While you should definitely avoid trying to optimise the last % of productivity, you should spend some time to make sure you're not using something highly suboptimal. If after reflection you believe you are using such a language/framework/etc, then broaden your horizons. That doesn't necessarily mean rewriting your current project, maybe do a toy project or some exercises in something else.
1. That statistics and metrics collection is incredibly important even if you only ever use it via libraries.
2. That code performance doesn't matter if the code is incorrect or insecure. So much of my life in industry has been tainted with an influence to conform to the cultural norm of "fast is best." This influence and culture is one of the most counterproductive parts of our industry.
3. The industry is actually full of great people, but those people avoid most of the media hubs that projects have access to because a tiny slice of terrible people dominate discourse. These assholes set the tone for the entire industry, and should be ostracized and punished. It's not everyone, it's a thin coating of hate.
4. Corollary to 2 and 3, I wish I learned to ask for help earlier in my career. I wish I could go back to my younger self and take the chip I'd acquired working with government contractors.
5. Corollary to 4, I wish I realized that I should be reading academic papers and that the people writing them weren't wasting time. Much of what's considered modern state of the art is in fact 5-10 year old work out of universities and MSR.
0) Money. the big money is in projects that need help. E.g. CEO during your interview: "The last lead programmer flipped me off and our accounting system in small talk is broken." That's hard. But that is where money is.
2) errors happen. Do tdd - so you can go to that concert.
2) Be the go to guy. If someone needs something you better be able to help. Brushing someone off creates office enemies and will remove any hopes of promotion.
3) any idiot can write code. I can with one hand tell you the names of people that can take over a system with 500k of mangled code.
4) think win/win. If you are doing a project - work hard -win for the company, but also put it docker so you learn something too.
5) launch side projects. You should release something large every year.
If you're not a founder, NEVER take equity in leu of salary. If they offer a competitive salary and equity, that's a significant plus, but equity as a portion of your compensation value is essentially a scam. if the company goes under or you're let go before the cliff (which is usually two years or more, a lifetime in this industry), all that money disappears: not true of salary. If a founder or officer alludes to houses, cars or other riches as a pitch to join their company run. Seriously.
Take the time to understand systems and infrastructure. Not every dev needs to be a kubernetes expert, but the big difference between a code monkey and a code assassin is that the assassin can deploy their own code to production if necessary. If you're a web dev and you can't configure nginx or apache, you have a gaping hole in your skillset.
Launching off the last point: learn to be competent with linux. Linux is the preeminent environment of the software world and it pays huge career dividends to be able to script, configure, compile, install and maintain linux software and systems.
RTFM. This is a big one. Don't skim. Relax and dedicate some time to a thorough understanding of details. You can save yourself an immense amount of time when working with a new library/framework/language if you actually read the manuals and understand what your tools are capable of, otherwise, you end up wasting tons of time brute forcing your way into a crude solution that may have been trivially and correctly solved by utilizing the tool's strengths and features where appropriate.
- Languages and frameworks don't matter. There's a closed set of concepts they're all reusing. Especially if it's hot shit: that means someone mined ideas from 30 years ago.
- Most problems tend to fall not to cleverness, but to compute power and the right glue. See previous two points.
- Everything is a tradeoff, everything is a moving target. Programming is about the battles you choose.
I spent at least five years chasing down "AttributeError: X has no attribute 'Blah'"-errors in Python at runtime, and came to think that this was what programming was. Three-or-so years ago I discovered Haskell, which transforms these types of errors into compile-time errors, preventing me from building the program as opposed to a sudden runtime crash.
I wonder just how many hours I've wasted doing this completely meaningless task. It's not really a problem while your programs stay small but, as they grow, I found it became the main source of time spent programming, taking away precious time defining the actual application logic.
Mind you, Haskell is fairly extreme in this regard, and I'm sure there are languages which take a similar approach, without the mathematical certainty of Haskell. But, as I've become used to the precision offered by Haskell, settling for something with fewer guarantees -- but more libraries and easier-to-digest documentation -- would feel like a great loss to me.
You can go even deeper and get into deep VIM style skills but there are many very easy things to learn that let you do stuff so much faster. Whatever editor your use, learn to use it.
Spend your early career, to the maximum extent possible, in well-run organizations surrounded by supportive, skilled teams, so that you can optimize for skill growth and (secondarily at first, but growing over time) for individually attributable impact/ownership.
Honorable mention: AppAmaGooBookSoft hire mere mortals, too, and mid-career salary expectations at them are $300k.
The important lesson for me was not to despair and not to get all preachy on the other programmers, but to see how to make the best of that situation. And while it was a real pain at times, I was able to be productive and get some real work done.
Also, if the only tool you have is a hammer, every problem starts to look like a sore thumb eventually. Do not stop learning new things. Both for pragmatic reasons, and because it helps keeping it fun. It doesn't mean one should use every shiny new thing out there just because. But without knowing what options you have, making the right choice is not trivial.
- As many people point out, the languages don't matter - something better and newer will come along, and you'll need to adapt, but that's not where programmers provide value - they provide value in understanding how to solve the problems that the business side is facing. It's easy to find someone who codes better than you - new grads, offshore devs, but it's harder to find someone who understands your business well and can solve the problems that it's facing.
- Always be learning, always be reading, always be innovating.
- If you can, contribute to Open Source and/or stack overflow, etc. People who interview you will do their homework, and you want to have a public presence that will help sell you.
- To me, the most important thing, is to try to work for an organization where you are the dumbest person in the room. It might sound counter intuitive, but if you are the smartest person there, who are you going to grow from? At the very least, when you look for a job, the people should matter the most. Obviously, pay, technology, commute, etc. all matter, but if you surround yourself with a good group of people, it makes work easier. The jobs where I was by far the most skilled and the most talented wound up being the jobs where the less-qualified people on my team became the biggest drain on my attitude and time.
- If you are going to go the management route - make sure that you get training. Can't emphasize this enough. Just because someone is a good engineer, and is able to self-manage and prioritize well, doesn't mean that he or she is good at managing other people. Just like you didn't learn to code overnight, you won't be able to learn to manage overnight. (That advice alone 15 years ago could have put me in a different trajectory).
* Listen to developers who have deep and abiding hatred for some technology that they can argue coherently (with a range of deep technical details, links to bug trackers, etc.). These rants are a gold mine can save you a universe of pain.
* Almost all good coding boils down to three things - choosing a less powerful language/approach, writing less code to do the same thing and looser coupling.
* All things being equal, take the job with the higher pay. It almost always means you're treated better in other ways, you work with better people, you work with better tech and on better code.
* Typed languages while more complex are worth it (circa 12 years ago I was a heavy scripting language fan)
* Unit tests that heavily use Mocks are almost always a bad sign. Brittle tests suck. Don't increase coverage for the sake of it.
* Get it done and move on. Try not to obsess on little details that add no value.
* "It depends"
* NIH (not invented here) is not always bad. In general it actually is often better (ie invented here). Respect the previous engineers when you move to a new company. There is a reason why things were built the way they are.
* Almost everything can be done in Bash :)
Using the same tool for build, test automation, deployment, sys admin, refactoring, etc. is valuable. Otherwise you are stuck with frothy and immature domain-specific tools that clutter your brain.
It's sort of like the idea of mastering a single editor. You wouldn't want to switch editors every year. Likewise I think knowing shell and Unix really well pays off over the long haul.
In my game dev it took me a long time to let go of "but I need to create an elegant/clever solution that covers all my planned features rather than just what I'm implementing now". What that got me was a lot of unfinished projects with elegant solutions. When you have time to code, code. Not necessarily the first solution that comes to mind, but maybe the second. Now you can keep coding instead of being stuck. Let your mind percolate on the solution in the background while you code, and while you're doing other things later. It's amazing how many times the solution will present itself after you implement a couple different pieces that now need to tie together. Use the power of your brain's pattern recognition.
Yes, you will "lose" some time in refactoring, but the truth is every project I've worked on, one-man hobby up to multibusiness teams, has had refactoring due to scope creep or "we didn't realize this would be an issue until we implemented it."
It will take time to learn how much thinking vs coding to do (both extremes are bad).
Final bit of advice: don't listen to the opinions of people as to what is a good or bad language. Try them out, use the right tool for the job.
OOP is just a sliver of it and the typical ALGOL-based languages you're learning are a small piece of what programming can be. Learn functional programming now. Learn about immutability, referential transparency, and data-oriented programming. Even if you continue down the imperative, OOP path afterward, this knowledge will change the way you approach every design.
There is so much more to learn, and so much more I could reveal; you'll get there, though, and it'll mean more because you did it yourself. Keep at it.
- software is just pure crap. Tools are crap environments are crap libraries and frameworks are crap. Nothing ever just works but endless nonsense and meta problems.
- career progression is shit unless you're really few of those superstars at an organisation that appreciates technical skills. Or unless you have other skills such as bullying ass kissing or office politics.
- regarding code itself. Code as little as possible. Code is very expensive so you want to solve your problems with as little code as possible ideally without any code.
- be aggressively lazy. Don't do anything that really doesn't need doing. Focus your effort on the few things that really matter. Remember hard work has no intrinsic value. Engineers in general don't understand this.
- don't be sloppy. The things you do code while you try to minimize the code the code you do write needs to be at least ok quality.
One of my best skills is assuming. I have to make tons of assumptions, and if I stopped working whenever I didn't know the answer for sure, I'd never get anything done.
Instead, I make my best guess. If I'm unsure enough, I'll also send off an email stating my assumption and asking for direction, but I'll still keep coding based on that assumption.
I am almost always right, and I get a lot more done because of it. Even if I'm wrong, it's going to be a lot quicker to rewrite what I've done than to have done nothing and have to do it all after I get the reply.
I'll answer a question you didn't ask, too: What do my bosses wish I'd known when I started?
That saying, "no," isn't a good answer. Never just reply "no" when someone asks if something can be done. Find out what they're actually trying to do, or suggest an alternate way to accomplish it that can be done.
When I look back at that period, I think I enjoyed what I was doing but in terms of technical knowhow, I wouldn't change much. Of course I know more now than then but I walked a certain path and I enjoyed it. The process was part of being where I am now. So, I think I'm happy with it so far.
What, I would like to have had since then: A good perspective on how the business functions. More empathy.
I've learnt these over time and even in this case, I think learning these was part of life. I don't really feel like "I wish I had the chance to go back and change things". I just feel foolish about some things I did then but I acknowledge that at that time my level of maturity was different from now and even if I had more (relevant) information or ideas, I'd not have been ready to use them.
Finally, I'd say that as long as you tend to reflect on what you do and where you want to go, you'll do fine. Conscious and intentional incremental improvements take you quite far on the long run.
Almost-as-important: stay curious.
Apart from that:
- experiment, make mistakes, screw-up, accidentally do rm -rf / etc etc. Just make sure you learn from them :-)
- look at how other people have solved similar problems, perhaps what your colleagues have done at your job rather than just random github stuff so that it has more context. See if they did anything that you didn't think of (... or not!)
- learn the basics of key data structures and how/why they work (graphs, trees, hashmaps etc). Learn why they are cool, what the benefits are and where they could be useful, but remember the most important point and try not to be too clever and force them in where a loop would do!
- try to keep your interests/skills/knowledge fairly broad. I've interviewed people who seemed really good, but turned out to really only know about one specific narrow field (e.g. they knew everything about ReactJS/Angular/VueJS (for example), but did not know even the basics of how HTTP works or how to do a SQL join) so I've had to reject them. As well as programming, learn a "enough to be dangerous" in unix CLI, networks, databases, web stuff, basic OS stuff, storage etc.
- similar to above, try and learn another programming language after you are competent in one. The learning experience and different perspective will make you a better programmer in both languages.
- finally in a slightly more negative vein, the company you work for might be nice and might be friendly, but the company will have zero loyalty to you if it comes to layoffs/re-orgs etc. Don't stick around at a company longer than you know you should just because you feel like you "owe it" to them.
Have fun and good luck!
Other than that, practice, practice, practice. And get out of your comfort zone when you practice, don't just do things that are easy for you. You are only learning when it is hard and it makes you wonder if you might be stupid.
Stop feeling guilty for not finishing side projects (only finish the good ones).
Adapt not just your skills, but your learning techniques (you're not in college any more, and the learning landscape is evolving quickly).
Don't be overly loyal to your company, at least more than is rational (their loyalty to you is limited to shareholder return and their basic humanity). This isn't to say you should bail early (as you won't learn or ship anything real), but value your own career over the number of years you stay with one company.
Look ahead regularly: where do you want to be in 5 years? It takes 5 years to get somewhere (like front-end, back-end, kernel dev, UI designer, etc.). As this question EVERY WEEK, and do something about it.
Make good habits: your habits are your learning and productivity, this includes the wetware (i.e., you).
Yes, it is cool to know all latest features from language X or framework Y, but real work on a company is not only typing code.
Learn to get overview of how software architecture and development processes work.
Build your social skills to be able to bridge between technical audience and those not so technical.
Do not work in silos, make sure you get an overview of what everyone is doing, get domain skills on the business areas the product is targeted for, learn what customers actually do and want from the product.
Keep your software design simple, your code simple, your tools simple. Sure, it's nice to use new and shiny tech for your side projects, but real software should be done simply and efficiently.
Simple trumps everything else, but it takes a real master to know how to pull it off. Especially in the context of complicated software requirements.
During my career I've met very few programmers who are capable of doing this well. It's the true art of the profession IMO.
1. To not worry about my code being judged too much. Everyone's code can be improved. The real art is to know the balance between good enough, and not contributing obvious technical debt.
2. Not being afraid to break things. (unit testing helps lower that fear, so is documentation, single responsibility principle, open closed principle etc)
3. Assume you will probably never have time to rewrite it.
4. Assume you will probably never have time to do a major refactoring on it either.
5. Boy scouts rule. Due to the above, just gradually make the code a little better everytime you touch it. You see something bad in the neighboring method? cleanup, even if you didn't write it, and make sure the unit test covers that (shows how unit tests are important. It's not just to test your code, it's to allow people to feel comfortable changing your code when you are not there)
6. Unit test (almost) everything on one hand, but feel ok to skip testing a function that does something so trivial that the test itself is just repeating the same logic. Also consider mutation testing over code coverage as a metric.
7. The obligatory - check your own code first before blaming others, Google everything, if something looks WTF, then you are either looking at the wrong server, have cache issues, wrong git branch etc... (9/10 of the times)
8. Use other people's code, avoid NIH syndrome, use open source (with the right attribution) and don't be afraid to try and contributing back to the community. Best code is code you never had to write.
If the problem is genuinely original to you, your best bet is to find the biggest leveraging factors(language, tools, libraries, etc.) and consistently lean on those to arrive at a solution fast, then pay down the resulting debt in dependencies, performance and gaps in UX later. This can actually aid in an R&D effort because reaching a clunky solution quickly will lend a certain maturity to the codebase and the problem you're addressing. But it means being willing to read and reuse code that you are personally uncomfortable with and know does not really solve the specified problem exactly. This is a revision-heavy process and it's antithetical to what many programmers are inclined to do - which is to get everything finalized in one shot, drawing on all the stuff they know is the "best practice" even if it's tangential to shipping.
The more you're willing to allow your code to be "knowingly wrong" in ways that are easy to call out and to return to later, the faster you can get to the stage when actually revising it has value. This is why everyone writes bad code yet some code looks better than others: the good code was bad code that solved the right problem, then revised.
You have to ask for more to get what you're worth. And it doesn't hurt to ask, worst case is they will say it's not in the budget (even then it's usually not a firm no).
The trick is during your review you have to say you want more. You have to present a case that you're worth more. And it's not even a hard or complicated case to make.
If you know what the industry standard is in your area and you're underpaid say "I think I deserve a pay bump of <gap + 5k>. The average rate for programmers here is <x> so I should be at least making <gap> and you just told me I'm doing a great job, so I think I deserve a little more than average."
In all seriousness I'm basing this on past experiences (both myself and colleagues). You probably deserve more than you're being paid. The company will easily pay more than they offer by a little and most likely by a lot (if you're a good negotiator and make a good case).
The key is: ask for more, justify by reminding them you do a good job.
* What customers and clients _need_ isn't always what they say they need. Learn to drive at the underlying problem in your discussions with them, and don't focus on what they think the solution should be. While you should always accept their input for the latter as well, keep in mind that most of the time it will address a symptom and not an underlying problem.
* What a customer wants may be related to what they need, but this varies.
* Don't solve problems prematurely. Even simple bug fixes - what is the impact? Are you changing something used downstream?
* Don't assume good tests will always catch all breakages. If they did that, we'd never have to fix bugs.
* Don't trust your dependencies, vendors, platforms, or anything else to reliably inform you of breakages and incompatibilities. They're all run by humans and humans make mistakes.
* You are responsible for shipping working products. If you include a dependency and it breaks, you are responsible for finding that out before your customers do.
- You must decide where you want to go next. The first thing you should think about is: three years from now, will you take the Manager path (lead a team) or the Individual Contributor path. If you choose IC, do you want to specialize, or you want to broaden your skillset and become more of a generalist? In any case, I would say work on soft skills, broaden your horizon (e.g. learn new languages, write front-end code if you do backend and vice-versa, etc) and learn one to three domains very well (look up "T-shaped", this is where you want to go). But focus on the part you will need the most for your next step.
- If you go for the generalist IC route, try to work as close to production as possible. That means: deploy your code, monitor what it does to the servers (or machines) it runs on in the wild, watch how real users use it. Also, it is time to learn how your tools (build system, programming language, OS...) work.
- If you specialize, pick something with a future, engage with the community, and if possible with Academia. Sometimes when I talk to engineers and mention I read research papers they think I'm crazy, but there is no way you'll be good at an R&D topic if all you do to keep up with research is watch videos and read popular science blog posts.
- Have fun. Don't burn yourself out working too much. Keep doing fun side projects, they teach you things you don't learn in a professional setting.
-1. That I should have jumped in straight into Lisp from day one.
0. That popular technology does not mean that said stuff is the best, great, good, or even acceptable. Example: PHP 4.
1. That the industry raves about a seriously, seriously crippled and flawed language (Java)
2. That "Design Patterns" are mostly workarounds for the problems introduced by flawed languages (again, Java and friends); not great ideas to be proselytized.
3. That Object-Oriented-Programming is not only done in the way of C++ or Java, but that there are much superior ways to do OOP. (i.e. Smalltalk, CLOS)
4. That if you want to solve complex problems in a productive way, you need a multi-paradigm language. Strict-OOP languages or Strictly-Functional languages will limit you, unless the problem is really suited to it.
5. That the "Blub paradox" is real. Programming languages are not equal.
6. Real world (i.e. commercial, production) software should always be done by experienced people, not by juniors.
7. A seasoned (say, 8+ experience) programmer can done things 8 times as fast as a junior (graduate) programmer. I've seen this firsthand.
8. Dilbert -as others have pointed out- is a documentary.8.1 Corollary: Pointy-haired bosses are real.
9. The customers will always think everything has been done using Excel Macros.
10. The salesmen are very important to the health of the company, so don't make fun of them; rather, make friends with them and help them get aligned to what the technical team is able to do.
Using one or two new things on a project rather than 10 you'll be both more likely to get somewhere, and more likely to pick up the newer elements well.
* Have tests but don't be crazy about it.
* Keep your development process as streamlined as possible.
* New languages generally aren't as hard as you might think and they might be the right tool.
* The right tool for the right job can make a huge difference.
2) Get solid on the basics and stay current: data structures, algorithms, computation and basic operating systems. Without these you'll never reach high levels of competency.
3) Develop boundaries. I've seen stellar developers reduced to a pile of depression and anxiety by poorly trained managers getting them to overcommit. Learn to know what you know well and what you do not know well. Push the rest back onto your manager and make them do their job.
4) Take time to enjoy and savor this time. We're in an age of technology that has never before existed.
- Don't use the next big thing before actually understanding the benefits only because someone else tells you to. (Looking at you, Angular and Docker!)
- Stay away from programmers who have strong opinions about certain things. Most of them can't back them up with skill.
Keep your work code as simple as humanly possible.
Do your experimentation elsewhere (using the time gained by keeping your work code simple).
Your future-self, your co-workers, and your client will be grateful.
Let's say you need an icon for something, but don't know much about design. Once in a while, try making it on your own. Learn about the pen tool, image formats, etc.
Let's say you need a simple SELECT from MySQL. Read more into how they actually work under the covers, in large-scale environments, or how they change for MSSQL / Postgres.
Let's say you need a particular jQuery function.. take a few minutes to read the source and see what it's actually doing.
If you take a few minutes each time you do something unfamiliar, you'll gradually build up a better understanding and larger skillset without having to put in too much effort.
2. Personalities matter more than technology.
3. Don't let people drive over a cliff, just because it's their responsibility. Remember, you're in the same car. In a matter of life and death (of the project, or the company) grab the steering wheel. Of course, you'd better be sure you know what you're doing.
4. Out of desperation, some people will sabotage you and then blame you for it. Sometimes there is nothing you can do.
5. Always maintain a good working relationship with the person you're working for, whether a manager or a customer. Chat more often, even if it is uncomfortable. Especially with idiots.
6. Some people will be afraid of you, if you have greater expertise. They need to be flattered.
7. Seek out and learn from those who know.
8. Notice I said nothing about technology.
Beware the changes in technology. I spent decades in an environment where saving a few bytes mattered, and C compilers were just okay. The coding style I developed is now obsolete in the era of gigabyte memories, and too hard to read. Change with the times.
Stop calling errors, bugs. They're not cute things that just happen because all software has bugs. Software has errors. Trust your instinct to leverage tools to manage complexity and reduce the likelihood of introducing errors. Lean on sound typing, formal specifications, invariants and property-based testing. Learn to love restrictions.
Remember: tests prove the presence of errors, not their absence. It's much more powerful to state, formally, what your software will not do.
Also be creative and play. Take an idea to its extremes and let the haters hate.
Programming is beautiful!
Going for a walk and thinking things through yields better code faster than iterating over it hands-on.
Frameworks are overrated and often a source of ephemeral knowledge and code bloat. Think twice before committing to a framework or a 3rd party library.
Also, picking a good name for a variable may take up to a day.
if you don't have a large team (who can help with bouncing ideas, etc), the benefits you get from using module ecosystems like npm or pip can not be understated.
People tend to not say what they really want. Become good at finding the actual requirements. As a CS student, if there are requirements engineering courses, do take them.
For many projects implementation is the least important part of the project.
Professional conduct is worth a lot.
I wish I had known more about what was actually going on behind the scenes as my code executes.
In my time, I knew my knowledge was lacking, but being poor and relatively isolated I had few options. Today, factors conspire to leave new programmers largely unaware there might be problems in the first place.
Nowadays, we have way better tutorials that teach people how to use effective programming methods, but we're still failing when it comes to imparting the understanding necessary for programmers to make mindful decisions about trade-offs.
I also wish I knew more about persistence and communicating what I'm working on, it's something I'm still trying to improve. When I was just starting out, I was working on a text editor, but gave up because I thought it was superfluous. When I was about 16, I had made a pretty good game (in hindsight), but gave up on it because I thought it wasn't good enough. My life might have turned out differently if I hadn't been so shy and uncommunicative at certain points.
* Own what you own 100%. Be proactive, ask questions so you understand context, and raise concerns along with possible solutions when they pop up.
* Help others when you can. If you are going to be in this industry a long time, your network of colleagues and friends will help you long past your current gig. They can help you solve problems and avoid bad technical choices and when you are ready to move on, they can help you find a new job. The kindness you show others pays off in many ways.
* It's easy to get emotional when you are passionate about a job or a project and that passion can quickly turn into anger. Before sending an inflammatory email, sleep on it.
* Learn the tools of your trade well. Know your editor, debugger, devstack, monitoring tools, deployment tools, etc. I'm a bit hyperbolic but the single best thing I did in the last 20yrs was learn vim well.
* Work hard but pace yourself. Put aside time for yourself to stay healthy.
* Enjoy the moment even when it's stressful. You'll eventually look back on your career and see that the highlight reel features some "against all odds" moments and battle scars.
* Keep learning
Various bits of advice:
1) Pay attention to the severance package when you sign your contract. When you join a company, you probably aren't thinking about what happens if things don't work out. But let's say you end up working there for 10 years, bad times hit, and you get laid off. You don't want to be surprised to find that you only get the minimal statutory limit. Some companies, I conjecture the larger ones, will have more generous severance packages.
2) Be cautious about choosing to work in "branch offices" which aren't involved in key decisions in products/features. You may find yourself limited in how you can grow, both in terms of scope of technical projects and scope of career path. This is probably a bigger issue if the region that you live in is not a tech hub like silicon valley.
3) When I was younger, I was completely focused on programming and "software craftsmanship". In fact, many of the problems in commercial software development are people problems -- team co-ordination, process improvement, empowerment, motivation, etc.
* that there are too many things to build and too little time, so don't code for the sake of coding, but solve problems and touch more lives
* that I could have supplemented my coding skills with business skills, and built something that made me money
* that life is short, and coding isn't the only thing to do
Bonus tip: strong CS fundamentals, math > new hip language, new framework
I was dead set on building entire products, it's why I loved programming. It was why I love lego. But in hindsight it would have been a better use of my time to work on smaller projects and ideas. As almost nothing ever got finished before I was working on something new. I have very little in terms of a tangible outcome from that time period, and it extended beyond those first 4 years.
Now I wouldn't want to work on a full product before I knew I had all the larger parts finished first. I wouldn't want to work on those larger parts before I knew I had the smaller parts those larger parts depend on first.
Programming with this mindset has provided me not only with endless work to do. But less stressful, more satisfying, easily digestible work with semi regular tangible outcomes.
- Relationships are key to your career. Align with good people and maintain those relationships.
- The product is more important than the code.
- Keep up with the latest tech, but don't necessarily use it.
- When starting a new job, learn the business first. Understanding what the product does and why is crucial and doesn't take long to learn.
- Avoid an adversarial relationship with other departments like marketing and accounting. Work together with them (back to point 1).
- Share your wisdom, don't hoard it.
- When you are no longer curious, something is wrong.
- Writing code is simply that. Enjoy it, don't glamorize it, and try not to obsess over it.
The biggest wins are where you make a good decision that avoids an entire class of bugs or an avoid having to write an entire layer of software. These are also the hardest wins to measure.
Pick something you are genuinely interested in and learn it very, very deeply. Don't jump around constantly or you won't have insight.
One thing I wish school taught was code maintenance. Most of the code you write has a shelf life of a few weeks as you fulfill your assignments. Bad decisions only come to haunt you after months.
You need to watch for new technologies that matter, but 90% of what is new will not matter. One technique I've seen work is to build a list of people in the industry you respect and watch what they're interested in.
- Design for maintainability, not ability. Code should be simple, maybe even a bit boring, and not trying to be too many things. YAGNI and KISS. This gets rid of a ton of time wasting down the road.
- When faced with a standard problem, use standard solutions. Use popular proven languages, libraries and frameworks, instead of the hip new thing. This saves time which you can invest in the parts that are novel and require novel solutions.
- Understand the business value of the code you write, and the political process that produces its requirements. This knowledge will create opportunities to earn more, do more interesting work, and have happier users.
Learn a sense of... I want to say "taste", but it's more concrete than that. Learn what the bad ideas are, and why they're bad. Learn a sense of "that doesn't feel right" that's technical, not just aesthetic.
Learn what it's like to maintain a two-decade-old code base of a million lines or more. See what the problems are. Think about what you're doing when writing new code that's going to create some of those problems.
Learn to document what you're doing to an appropriate level of detail. Take the time to do so.
If everyone are using X, don't go with just Y because it is slightly more elegant or efficient.
It took me a long time to get this bored of it though, so if you are similar you should be OK for a long time maybe.
If you get paid well, don't spend to match your income. Save as much as you can. You never know if you'll lose the drive 10 years in.
I know the world of code can be very exciting, but after a lot of work you start to see there is nothing new under the sun and you fix and write the same old things in different forms. And most of the problems you grapple with are man-made, like the idiocy of using languages without static typing voluntarily
- Use tools and programming language that you personally enjoy, not the one trending on tech sites like Hacker News
- Focus on mastering at least one programming language
Those things are important, but I focused on them too much. I should have spent some of that time on higher level math-y skills like machine learning, numerical optimization, vision, NP hard approximation algorithms, computational geometry, control theory, etc.
Learn algorithms and Big-O just enough to pass job interviews, deeper understanding of these is nearly useless in practice, at least outside few narrow niches.
Learn to design and code safe and efficient multithreaded software. While not often asked on interviews, youll do that over and over again regardless on languages and platforms, because nearly all modern CPUs are multi-core.
Learn to use other peoples libraries and third-party tools. While their quality vary, good ones can save you tremendous amount of time. BTW, an IDE is one of these tools. Just dont forget about costs (some might be too expensive for particular project) and licensing (some are GPL).
Dont afraid to change jobs. Just that youre working with nice people is not a good reason to stick to your employer. Make sure you learn new stuff, skills degrade over time as the industry moves to new technologies and platforms.
Get exposure to customers. Try to get involved with decisions involving them. Many companies actively discourage engineers from having customer contact; this is bad, IMHO.
Get exposure to the financial side of whatever industry you're in. You don't need to do official work, but definitely make sure you understand how your company makes money and what its risks are. (Do a start-up or two; this will give you a visceral feel for what money is worth assuming the places you work at are run well).
Read a paper a week (e.g., something from usenix or the ACM, or whereever). Sites like The Morning Paper (https://blog.acolyer.org/) are pretty good; the thing is not to get caught in a rut.
If you're doing IT work, get involved in dev work. If you're doing dev work, get involved in IT. These feed pretty heavily off of each other and operational background will boost your engineering skills as much as coding skills will help your IT work.
Things I wish I'd studied harder, earlier: Statistics, practical aspects of databases and SQL, at-scale networking [didn't exist when I was a sprout], practical aspects of operating systems implementation (the stuff they didn't teach you in your course at school), maybe the first six months of an EE course . . . I could go on for quite a while. The good news is that there's no way you'll run out of stuff to learn, not in your entire career, and it's all (usually) applicable at some point.
To this day, I still get very annoyed when someone takes what I have done, completely reworks it or even throws it away, doing something else that IMO is more complex and difficult to work with. My values have shifted from doing the quick and custom style to moving more toward standards and TDD in a style that everyone can pickup easily and understand.
This has made my work so much more productive in getting to the final production quality by a factor of not less than 2. In my youth, I spent 99% of my time fixing code as it broke. Now, I unit test and in many cases, end-to-end test with TDD frameworks providing myself with a much higher probability of success when pushing to production.
You actually have to play politics to be allowed to do your job to the full extent of your abilities.
Most programmers are short-sighted, selfish, and lazy, so it's unusual to find yourself with a group earnest talented people who have experience. Appreciate it, and take advantage of it while you can.
Take care of yourself. You are not a robot. Showering, skin care, hair care and sleep are important. It's worth it to go to a good stylist regularly. If you're happy, you're doing better work, and most importantly you're more approachable to your coworkers.
Don't ignore mental illness. It needs to be dealt with aggressively, on multiple fronts, until you've figured out the right ways to cope and be functional.
You can't just code alone in a corner. You need to socialize with your team, or you'll miss out on the meta knowledge (patterns, styling) that's being passed around the team.
You are smart. Give it a few years, and those impossibly talented and brilliant senior programmers will be your peers.
Don't be afraid to refactor and change code. The person who wrote it didn't know what you do now, because business requirements are constantly changing. Be aggressive - sticking TODO statements in code isn't going to fix technical debt.
Be delivery-oriented and don't be afraid to make design mistakes - it won't be perfect on the first time anyway.
Know more than your niche, get out of your comfort zone once in a while.
Respect your co-workers - even if they make mistakes, it's OK, you will too at some point.
During my career I've spent a lot of time resisting and rejecting the overhead of time spent reporting what I'm working on and to some degree careful planning for the future. Like a lot of programmers, it only takes one or two short meetings a week before I feel like it's too much and meetings are a massive waste of time.
My first real job coding CG effects at DreamWorks, I got a black mark in my personnel file in my first 6 months for complaining about being asked to show my progress once or twice a day. It was during a 3-4 week coding project, and it took about and hour to prepare for dailies, so it seemed to me like I was being asked to sacrifice 25% of my productivity, to the detriment of both me and the company.
A few years later I'd been working on a shot for a month, thought it was exactly what they had described, and pretty good and close to done. But it kept not being finaled. Three months later when the director approved it, I looked back at what I thought was near done month 1, and it was crap. I realized that we sit in meetings and describe in articulate detail what we want to achieve for hours, everyone agrees vigorously, and people still walk out of the room having completely different ideas. I realized I need the overhead for course corrections for what I'm doing -- I will veer too far away from what others want without fairly continuous feedback. After seeing that in myself, I see it everywhere with others, programmers working too long by themselves will make what they want and not what the team needs.
Communication is what I want to improve. Not more of it, but how can we make it better?
I also wish I'd gotten out of C++ and into web earlier. ;)
2) Most companies have zero loyalty to you. They will fire you and thousands of others the minute they are in trouble, and without hesitation. If you're loyal to a company it's a one-sided relationship. Take care of yourself, the company will be fine without you.
3) Age discrimination exists, and it is VERY harsh. And your brain will eventually slow down while technology ruthlessly and quickly marches on. You might find it tough to keep up due to either or both of those factors. Save up early. Be able to retire by 45. Keep working if you still love it.
EDIT 4) Get EVERYTHING in writing. Happened in a conversation? Follow up with a simple email "Just so there are no misunderstandings, I wanted to confirm that..."
Also some aspect of your job will always suck. Even if you find the perfect job the manager can change or even company gets taken over. For control you need to run your own biz.
That said, I think the best advice I can suggest is Divide et impera, https://en.wikipedia.org/wiki/Divide_and_conquer_algorithm
A high-level design document of any significant system and subsystem is worth its weight in gold (or: programmer hourly rate * time to get up to speed on system).
This documentation will also help you in a years time when you need to either maintain that system, or need to remember how you built it so you can build something that is 90% similar to it for another project.
The more you know the more you will come to understand you don't know much; that is both good and bad (Dunning Kruger vs Imposter Syndrome).
Every time you think you are the best in the room, look around and ask yourself are you overestimating your knowledge. If you are still the best in the room, maybe it is time to find a room with smarter people.
Not every solution requires code / technology.
The best code is easy to read and even easier to delete.
Give your code to the most junior member of your team - if they struggle with it you need to make it simpler.
There are many many lessons like these around - the single most important one - always be open to new ideas no matter how much they oppose your current beliefs; strong opinions, weakly held.
I think you already said it: "I'm also realizing there's SO much more to learn."
Don't stop learning. It was probably around 1988 when someone suggested I look into Lisp and I dismissed the comment at the time, although I did look into AI. I do wish I had known more about Lisp, not necessarily programming in Lisp, but just the knowledge of the concepts that come out of learning Lisp: garbage collection, stacks, lists, trees, macros (not the terrible C macros I was using at the time but Lisp macros), parsing, code generation, profiling, the benefit of programming in a more functional way, and I am probably missing a lot of things here I take for granted. Don't stop learning.
Otherwise you will get calls during your vacation; you may not be able to work on other projects, switch teams or even get promoted - or if you do, you will still be supporting the code you wrote years ago on the side.
I also wish I had known to buy some Bitcoin.
This also applies to how much energy you put into your work. I started out trying to meet crazy timelines and for the most part I did it. But eventually it became the norm and I couldn't keep up. It took a lot longer to get managers to understand that nights and weekends are not sustainable.
Lastly I would have jumped ship sooner. I've been working for the same company for 11 years and now that I'm in the market for a new job, no matter how much I tried to diversify myself within the company, I don't always have specific skill sets these new positions are looking for.
Explicit is better than implicit. All state is hard to reason about and debug. Code that doesn't have tests is brittle. Short code is better than long code and no code is better than both. Inheritance of implementation is hard to reason about.
Some technical advice:
Write comments about why you're doing something, not how. Write lots of comments. Check preconditions, especially nulls. Write explicit error messages for every failure: you'll be searching for them one day.
One non-technical thing:
Understanding the problem you're trying to solve is often better than any technical knowledge. Understand the business processes, the users and the people and you'll find you're vastly more effective.
- "how to solve it" by george poyla
- asking more "why"s to problems
It is important to meet the right people that one can learn from (who are ready and able to share their knowledge).
Spending too much on sites like HN/slashdot/reddit is a bad idea. Again one has to find the right balance (and the right sources of information that do not turn into time sinks), balance is important like with the other stuff ...
When this happens repeatedly over time in an organization you wind up with a large, complex codebase that tends to solve problems in pieces and at scales other than the correct level (i.e. as the user experiences it).
Usually, the best approach to solving the largest portion of the problem at hand does not involve writing code, and if it does, it won't be code you are interested in. Such is life as a programmer.
If you start going down a path that makes you feel less happy, take a moment to ask yourself why that is, and what you're getting from that tradeoff. If you can't answer that question in a way that makes your inner mind happy then figure out a way to change course. And a slightly higher salary is not a good reason.
Take your testing as seriously as your development. Not just in the details of the implementation, but understand your user and your use cases. Write end-to-end test suites, integration tests, and unit test complex logic.
Don't be one of those "unit testing is enough" or "I TDD all my code." I find the more time people spend on little testing, the bigger problems seem to fly through to prod.
Your company will try to stab you in the back one day, so you have to keep an eye open for it. Always reserve 1% of your career energy towards looking for a new job greater than or equal to your current job. Whenever you find one, take it, and just keep on looking. (If you do contracting, never let any single client represent more than 50% of your total income.)
It's harder for them to hit a moving target. And even if they do get you, they're more likely to just wing you instead of hitting something vital.
I wasted years trying to do things "properly" (completely pure OO in my case) when I could've been releasing software, and wasting effort anguishing over why I thought differently to the gurus.
Now I have no time for programming fads. But try not to go too far this way - it's easy to be too late an adopter too.
Anger is best solved by not ruminating about it---the catharsis hypothesis is busted.
Read other people's source code of interest, closely.
Increase focus/limit distraction by limiting the work-in-process with Kanban-like systems.
Assembly language matters but abstractions can multiply the power of your systems. Conversely, too many layers of abstraction is a design-smell.
And soft-skills care not what programming language you speak.
Independently of work, learn a new language once a year.
Most people are not that good, or confident, even among higher earners.
- If you do something more than once, automate it. Create a script, write a bash alias, something
- Keep reading; Go to conferences; Get a subscription to O'Reilly Safari - worth every penny; It's easy to become a dinosaur as a programmer
- Step through every line in your code - TDD is a good way to do this (corollary: figure out a good TDD methodology for your workflow).
If you're going to use design patterns, great. But don't argue about the exact official gang of four definition of the facade pattern - a more productive conversation is about which specific bits of the pattern help you solve your problem and which are an impediment.
Tests great, but when you're just starting a brand new project where the behavior and spec is changing as you build and learn, should you suffer through brittle unit tests because "not testing is bad practice", or could you perhaps start only with integration tests, and wait a little bit until you start doing anything more granular?
Complex git branching / release / hotfix / etc schemes can be great in a larger organization, but when you're on your own, do you really need all of it or is it too much overhead? If you don't have a staging environment, should you have a staging branch?
Summary: a) Am I actually trying to solve a problem? What problem am I trying to solve? b) Is this thing going to solve my problem or a problem that I don't have? c) What can I change so it /does/ solve my problem?
2) In a large enough codebase, there is always bits that are shitty for a variety of reasons involving bad programmers, bad practices, no practices, bad requirements, terrible deadlines, old tech, whatever. You don't /want it/ to happen, but it will. Or perhaps you'll be dropped into that codebase, and so you'll have had no say to begin with. An unappreciated part of the practice of software architecture is about containing current and future shittiness, stopping it from spreading, managing the risk around that, not allowing that to impede current development, setting up a surrounding architecture, getting people on board socially to do the right thing, having a good plan to replace it and acting on that. "No new code until everything is clean and tested" sounds so valiant, but I'd like to see it happen in a 100 person organization with bills to pay. Alternatively, after you've contained things, then you can feel free to adopt such policies at a smaller scale within well-defined regions of the code.
Since we read code more often than we write it, put a little extra effort into making your code easier to understand.
On this and other forums it seems like everyone knows everything, but that's only because there's a lot of people here.
2. Try to setup a nice workflow in the early stages. To me, this includes setting up the code in git, and a minimal test/deploy system. This encourages me to commit often, make incremental changes, and rollback/switch branches frequently.
Continuous integration first - first line of code second.
Understanding that writing code is a small percentage of my day - then there is testing, designing, writing docs, deploying, automating, infrastructure configuring, discussing with stakeholders,
Learning multiple languages - especially from different families (procedural, functional, scripting, low level, etc).
Had I known this sooner it would've sped me along considerably towards finding a lot of cool things that give me more motivation to program.
Throughout my career, programming mentors have shaped me to be who I am. I've learned most of best practices through code reviews and from my mentors.
It tends to be pretty easy to speed up readable+simple code when you need to do so, but fixing broken fast+clever code is much more difficult.
I would add that you shouldn't be afraid to use new tools is they get you to the end faster. Common case for me: I use c# for almost everything, but nodejs wrapped in an API for crawling
Looking back 24 years, I'd also add, to be more involved in the local hacking community and participate in hackathons.
Anybody can code, but to make a difference, you need to network ;)
You will thank me.
I wish I designed a testing strategy for the feature I am developing.
I wish I learnt and embraced good engineering practices and spread those in the organization.
Still not a superstar, but my code became better in the last 4 years.
Your skills will grow, but the churn of tools and techniques will have you relearning things on a regular basis.
It's not them, it's you. Any problem you have is your problem and the solution is something you're going to have to do. Be it a compiler bug, deadlines blown through by partying interns, shoddy code written by contractors, insane deadlines imposed by self righteous VPs, etc. All of these problems are caused by you. You took these jobs. You fed the mice cookies. You didn't say no. You didn't spruce up your resume and blog on LinkedIn. You are the only person that is ever going to try to help yourself, so if you don't like what's going on, there is no where to look but inwards.
Every line of code is a devil, waiting to bait you. Every curious syntax, handy shortcut, convenient convention that only you and the few who read the docs will know about, is bait in a trap. It's better to write less code, simpler code, and code that eschews advanced features in favor of being obvious. Imagine yourself having not slept for 24hrs, being drunk, with a CRT monitor at 640x480, typing on a keyboard covered in elmer's gluge, and then write code you could debug that way.
In about 20yrs on the job I don't think I've ever seen a situation that truly called for more performance. I've seen bad processes that were too slow because they were bad, and I've seen inner loops that needed to be unrolled, and I've seen (written) code that was hitting the database in ways that were totally bonkers. Slowness is mostly about bad decisions earlier up in the decision tree. Unless you're writing trading algorithms or video games, you likely have no use for your program to run any faster.
Prefer bad working code over good code that still isn't producing any useful output.
Your choice and relationship with your spouse will have more of an impact on your career and long term happiness than anything in technology. Take care of home first. Then go to work.
You are going to need a few key side skills: public speaking, making small talk at parties, presenting to people above your pay grade, technical writing, etc. These are key differentiators that are more valuable than being able to write more or better code.
When you're feeling burned out, take a day or two off. If you aren't able to, or you do and it still doesn't help, then something deeper is wrong.
Cutting down on the drama of deploying and maintaining production software is just as important, maybe more, than fun during development. Yeah some languages are excrutiating to code in, but they run smooth, and that's worth a lot. And some languages are a lot of fun in the editor but a bitch on the server, avoid those.
Steal ruthlessly. Anybody who is doing anything cooler or better or faster than you, buy them lunch and ask them what they're up to. You don't have to follow in their footsteps, necessarily. But at least being familiar with other ways of accomplishing things really helps broaden your horizons when brainstorming or thinking about problems.
It's okay to take long breaks to do something else. You can always come back.
Make friends and stay connected. Your rolodex is your escape hatch if things get ugly.
You are a business. The product is yourself. You're the founder, CEO, president, etc. When you answer the phone, do so as the CEO of You, Inc. Ask yourself: if I was a business person, and one of my employees was representing my business to my customers the way I am doing now, would I fire that person, or promote them?
Knowing which rules are actually enforced and which rules are just for keeping chumps corralled can really help your navigate a bureaucracy.
Making friends with people who make and enforce rules can get you out of following a lot of those rules, or just provide back doors into the processes.
You pick your boss and at work that is likely one of the most important decisions you'll make. If you don't like them, find a new one.
Apart from startups: in startup, technical bullshit is replaced with business bullshit.
- Selling skills either by sharing knowledge in form of code or teaching/blog posts.
- Learning the fundamentals.
You don't get to complain if you are part of the problem.
- get a mentor. Some chilled senior guy with lots of experience. Speak to him regularly to fish for knowledge. But don't get hung up on everything s/he says. Programming is huge field with lots of parts.
- there is no silver bullet
- simple is not easy (search Simple Made Easy by Rich Hickey)
- always be pragmatic
- there are indeed better approaches than OOP, which differ greatly in long run of project, and pay back (FP) later, and it matters
- avoid "the chase" of latest best-good thing, get productive in something that matures well
- don't ignore latest practices and latest progress just because of the above mentioned things. Keep learning and try to reapply new stuff (at least in your head) to range of problems you solved, and think if pro-s and con-s.
- avoid any heated discussions about languages
- keep your ego out of work
- the less you need to code, the better. You are paid to solve problems, not to churn code.
- finished is better than perfect. Don't gold plate your solution. On flip side, don't code shit and try to excuse it with above-mentioned sentence. Be pragmatic.
- types are your friends (and friends of your colleagues that have to work with your code), take time to learn how to leverage them
- unless you're working on life critical software, don't stress (even then don't, but...). If you feel pressure and stress, work on handling that. There is no point in being miserable because someone needs ability to put dog face onto a photo.
- you'll be programming for a lot more years to come. You may genuinely like and enjoy it throughout that period, or hate it. If you hate it, it doesn't mean you're not suited for programming, maybe you're not using language that suits you or allows you to express yourself clearly. Yes, people say languages don't matter. From your perspective as programmer, they do (they don't for business as long as it gets job done etc.).
- learn new language at least once per 1-2 years. No need to use it, just get familiar with it, it's design choices, it's public APIs, some internals. Language creators are generally very smart and you can learn from them a lot.
- Once you're a bit more senior learn from other (junior) devs. They're the ones usually chasing latest hot frameworks. They have time for that. Be appreciative about that, and take your time to listen to what they have to say, and what excites them, and how it relates to your experiences. It is also opportunity to grow.
- Try to contribute to open source projects. Not to build portfolio, github or whatever. But to give back some of the service. You'll be paid back by learning a lot.
2. Pick a programming language and/or ecosystem and stick to it. That's not to say there isn't power in being a polyglot, but in order to get really good you need to pick one thing and practice it. It's that simple. That said, do not brand yourself as any one thing or be too specific. The key is to both specialize and generalize. You need to be malleable enough as things change, but at the same time not constantly chasing your tail with the latest thing. This fine balance comes with experience, as most new technologies and techniques you will find are the result of someone rediscovering something. I can't count the number of times I've seen something rebranded as new or revolutionary that was originally published as a paper in the 50's or 60's.
3. Own what you do. Don't wait for others to come to you with problems, think about ways in which you should be improving your software via instrumentation and closed loop controls. Try to understand the users of your software and what they really want and need. Sometimes little things and details that are seemingly unimportant are very important indeed. Software is a way for you to directly influence and collect information about the world, so you can be constantly testing your assumptions and refining your model.
4. Do personal projects. It's the only way to avoid burn-out and to keep yourself interested. And in many cases, personal projects can shine the light for you on where to go next or what to do next.
5. Get good at interviewing others on a team and make yourself part of the interview process. Real team building is a far more valuable skill in accomplishing your goals as an engineer than becoming a manager.
6. Stay close to the tech. At a certain point you may find yourself in a position where you aren't coding or creating every day. Avoid this at all costs. It doesn't matter if you have a team, or if you're in an architect role, or whatever, you should have the code checked out at all times on your computer, have it working, and be able to contribute at a moment's notice. If at any time any of this isn't true for you, stop what you're doing right now and make it true.
7. Don't be afraid to throw out huge legacy code bases and start over from scratch. Nature does this all the time; it's called trial by fire. The second time you do something is always easier than the first and you can really eliminate a lot of debt for you and your team.
8. The first time you do something, if its not messy and weird you aren't trying hard enough or pushing yourself hard enough. The code will be awful. Don't strive for perfection in the code the first time, if it sticks you and others will have plenty of time to refactor and make it better later. I've seen tons of "perfect", unused code that has never seen the light of day again and its really sad.
9. Work for a variety of companies, small and large, startups, mid-size, big tech, and do freelance at various parts of your career. Different size companies have different goals, needs and problems and it will help you understand what is applicable to a Google does not matter at all to a startup or mid-size company.
10. Work for companies that are actually doing something, preferably new work, and try to match that to your interests at the time. Avoid places and people that are toxic and do not have a deep love of technology and do not identify as "nerd"/"hacker"/"geek" etc (unless you yourself do not identify this way..)
Early on I was always tempted to prove how smart I was by writing very neat code that nobody could understand because I was using some esoteric library or a weird pattern that only kind of fit (although it worked). Don't do that. Try to be very VERY obvious and you'll thank yourself later.
Its easy to over-engineer any project, but I find OOP especially easy to screw up with outsmarting yourself. You've heard of "spaghetti code"? Well with OOP the dreaded paradigm is 'ravioli code' which is tiny little classes all over the fcking place.
Find a better way.
Another rule of thumb someone told me once is that your classes should not be longer than about 1 page of text. Now, before I get yelled at, yes, its very subjective. You could have 100 lines on one page and I could have 30, I get it. But I think the idea is at least it is some* point of reference so you yourself can judge if a class is trying doing too much.
I worked with an "Architecture Astronaut" (see: https://www.joelonsoftware.com/2001/04/21/dont-let-architect...) one time who was supposed to be giving me a way to access a flag in the database. Just a simple boolean that let me set something to, obviously, true or false.
This guy checked in a 200 line class and walked down to my office to teach me how to use it. Finally I said "can I just set the value manually?" "Sure" he says, "Just use this function" and he showed me a 3 line function buried in there somewhere. Last I heard he is still confusing everyone with his overly complex solutions to simple problems for Ford.
Programing is FUN, but it's also a profession. Don't get too lost in the fun of the moment. Write clean, obvious code and you'll see that you don't have to make things complex to have fun. You'll have more fun solving those big problems now because you made everything nice and neat and clean along the way.
I'll end on a quote from Blaise Pascal, Winston Churchill or Mark Twain (depending on how you google it) that I think applies here as well:
"If I had more time I would have written you a short letter, instead I have written you a long one."
This could be rewritten like this:
"If I had more time I would have refactored you a short class, instead I have coded you a long one"
Its a comment about editing (obviously). yes, write long classes then delete all you can to make them simple like I have explained above.
I should make this comment short, but I do not have the time.
I'm working on an HN app reader idea that I think is unique (more to come) that requires regularly getting the front page posts and comments. I wrote a script to do that through the Firebase API but holy shit it ended up needing thousands of requests to get all the data for the current state of the front page.
So instead, I wrote a scraper script to produce the same thing, just with 30 requests (1 per front page post). (Trying to turn these damn <tr>'s into a recursive comment tree was a quite the mindfuck btw)
...is it ok to scrape HN? I see nothing in the robots.txt to say it shouldn't be allowed, and I actually feel better making 30 scraping requests rather than XXXX API requests.
EDIT: Also happy to receive suggestions. I'm coding in Ruby and don't see an obvious way to access the Firebase DB directly (quite frankly I don't even know if what I just said makes sense) so any help is appreciated.
The closest thing to a source repo is this from many years ago:https://github.com/wting/hackernews
The app is top notch, but it does not scale very nicely. Too much to hold in memory.
It has been in active development for several years, and is actually quite popular in its own site.
It also incorporates several interesting concepts like an invite-tree,etc.
I don't mind HN close-sourcing its code...But I'm definitely curious keeping Arc alive. IMHO, the rest of YC stack is pretty vanilla.
I wonder if Arc is the "burning candle that must never be allowed to die out"
At least their API is sourcing all data from Firebase last time I looked at it...
That's only a benefit for a small percentage of people. If you're a middle-manager or salesperson, cash back on purchases reimbursed by the company can be considered part of your compensation.
I suppose the bank can negotiate with certain popular companies for a higher cash-back rate, which is harder to do as a bunch of individuals.
Outside of these, it's not really a benefit since it's included in the interchange fee. You might not notice it because your bank hides it with clever marketing, but it's there.
> 2) it has no fee in most cases
One common credit card fee is 2.9% + $0.30.
> 3) the payment is instant for the user, meanwhile bitcoin is much slower.
Payment is 6 months if you want to be sure. Anything less can be charged back. Bitcoin payments are instant if you're willing to immediately confirm, which isn't a bad idea on payments smaller than $50 or where it's a repeat customer.
The one area that you truly benefit from a credit card is in the consumer protection laws: You can chargeback very easily and it's tough for the merchant to dispute it. Bitcoin transactions can't be reversed, so if you get scammed you're out of luck.
The items you've mentioned are just banks out-marketing you. They aren't fundamental benefits. You pay for them with a markup that the merchant adds, and you also end up paying for a bunch of banks and Visa/MasterCard to exist.
Checks or ACH are better than both credit cards and cryptocurrencies, when applicable. Terrible security and a bit clunky, but very efficient for moving money around. And you can even get a card with a lower fee: I think the debit cards from major banks are 0.05% + $0.21, though you might have to convince the merchant to charge you less.
My ruling? For casual use, then - mostly because of the better security:
Credit cards > Cryptocurrency > Check/ACH
For anything serious, then - mostly due to cheaper transfer costs and assuming you can trust the counterparty:
Check/ACH > Cryptocurrency > Credit Cards
For guns, drugs & porn, then - mostly because you don't want self-righteous politicians or outraged soccer moms pressuring your financial processor:
Cryptocurrency > Check/ACH > Credit Cards
Alternatively grab a German dictionary.
What finally made it into a working solution is writing plain markdown files, one per day, automatically synced to bitbucket via tiny bash scripts that initiate a new file for the day (aliased to 'j' for minimal hurdle to start writing), opens them in an editor, and committs to the repo after closing the editor.
It is available here: https://github.com/samuell/mdnote
The nice thing with markdown, if you make a level-1 header for each new file, is that you can concatenate the file into a long file, and run pandoc -i allnotes.md -o allnotes.epub, and get a formatted and searchable notebook for offline use, when you want to read it, with the Level-1 headings denoting chapters - so, one chapter per day!
(I have a script for this too of course: https://github.com/samuell/mdnote/blob/master/as_epub.sh).
I start the day with:
% note (which just runs Emacs on my notesfile)
I used to have macros and whatnot for carrying forward lists of TODO items and important tasks, but that was overkill and keeping things simple seems to be the key to success. Likewise, apps like OneNote and so forth just got in the way and wanted to own a piece of me.
My team also do standups on Slack, and I've got into the habit of writing detailed Slack stand up bullet points with links to commits, documents I've created and so on - almost a semi-public developer diary. I don't check back to these very often myself, but they do spark some useful conversations.
I've also gotten into the habit of writing extremely details commit messages - often multiple paragraphs for a few lines of code change - that record the background and reasoning that lead me to the change. I do most of my code reading through the GitHub web interface, frequently referring to blame and history, so the more context I can find for historical commits the better.
The way I write it is similar to test-driven development I write down each step in what I'm doing before I do it. When I run a command, I copy the command itself into my notes, then once it's run I copy the important parts of the output (e.g. any error messages).
It really comes into its own when I want to pick up on a task that I had put to one side a few days previously, or when I run into a problem that I think I'd encountered before. It also makes it much easier to avoid the trap of trying the same thing several times before you realise that you're going round and round in circles.
It's also useful for writing documentation. You can just copy and paste what you've written in your lab notes into your commit summaries, Jira tickets, e-mails, spec, help files, whatever, then tidy up as appropriate.
The last technique especially helps me a lot. When thinking through a hard problem, type out your thoughts in a semi-structured way, never deleting anything. Makes it easier to deal with problems that can be too large to hold in your head at once, to think about the aspects of something step by step, or to retrace your thought process and see why you made certain decisions earlier and maybe explore a different route when you get stuck. When finished, it can be used as a foundation for a design doc I share with the rest of the team.
This creates a feedback loop for stress reduction where I aim to mitigate both the likelihood of having a crisis and train a calm response by learning how to deal with smaller stuff so that the day is full of 1's. I chuck it all in a text file once a day, and return to it because my todo is also in there so I always have a backlog. I don't distinguish between work and hone tasks although I might if I were going in to an office.
Long form diaries I don't really engage with because they'd sap relatively more time - I would get caught in trying to make it a storytelling experience.
I can't believe nobody made this already!
A nice side effect is that weekly status meetings are easy.
A simple markdown formatted file is more than enough.
Currently, I'm sort of split between three tools. Omnifocus (a GTD manager) for tracking all the tasks, quiver for notes through the day, and then I use [emergent task planner], a paper based task planner for the days tasks. As much as omnifocus/gtd helps me track things, I found using paper to block out each hour of the workday ahead of time really helps me focus. If I find myself losing focus, I can refer to that and (usually) get myself back on track.
They're not deep or very in depth, but I leave them public in case someone needs what I discovered.
I got the idea from someone who posted their version on Hacker News years three or four years ago. Theirs was more journal like in its disclipline- the author added one a day.
After I moved to a full time role in my chosen industry, I had less time to focus on personal projects and less motivation to keep blogging regularly. I try to keep up with it but blog posts are few and far between now so I would no longer call it a diary.
The only standalone artifact I keep, though, is an excel spreadsheet tracking rough office hours, project, caffeine consumption, and choice of lunch. This helps me reassure myself that I'm not slacking off (especially when I'm considering a short day), a top level rough timeline, keep my caffeine intake in check, etc.
I find it really handy to figure out how your thought process about the project has grown over time.
It's available for every platform.
You can create checklists.You can share anything from your mobile with trello so I keep track of everything I read.
Initially I kept notes in Evernote, but eventually switched to Quiver (http://happenapps.com/).
like any other diary, you won't re-read it and if you run into an issue of which you know you've faced it before, chances are that your written down thoughts are that unstructured that solving the issue for a second time probably takes less time than trying to find the solution in your notes.
so if writing down the issues you're facing and their solutions makes it easier for you to remember, go for it, other than that such a diary is of no use to my opinion
Share the wealth! :)
What I do keep is a large file of projects or snippets of projects, sometimes with extensive notes.
I refer back to these frequently to see how I did something or look at code samples.
But, as time goes on this has become a bit of maze to wade through. I spend time trying to remember what project it was etc. etc. Grep helps a bit :). It would be better to organize this somehow. Not sure I'm interested in a full blown diary though. DRY.
Something that is yours and walks out the door with you, every day.
When the system or someone starts to screw you, such a record can be useful and actually viewed with some validity. Better yet, can be meeting minutes and internal communications that document the situation.
There's a reason Comey is known for writing memos about problematic situations.
I noticed after 43h in a moving window of 5 days my focus, irritability is up to the roof and I make way too much mistakes that can lead to a dramatic mistake.
My work contract is 37.5 so everytime I reach too much overhead I talk to my manager ask him if he will need me one day to make extra efforts in case of emergency?
He says yes, I say I will abide but if we are working under normal load, than he needs me to rest and give me my time back.
He then picks on me, saying it is my responsibility to not stay to long at work, I make him notice it is because of the company management I have to stay late and the deadline.
He grumbles says it is not the right time.
I go to see the CEO say the same thing
They give me my family time back. I stay quite rested (add 2h30m / day (when the rail company has exceptionally no problem) of commuting with the worsts train lanes of Europa (1M commuters/days)) so it actually feels like commuting is working. Teleworking is denied for lack of control.
Oh! and lunch time is not counted as worked hours except for the other managers. (so I stay away from my family 10hours per day, I see my wife 5 hours a day).
That is the only diary I am keeping.
If I get overworked/burntout, it costs nothing to the company, but I will certainly get fired sooner or later and have a hard time finding a job with a sort of depression running.
I find myself looking for more "adult" communities nowadays, and it has been a struggle to find them.
For random comics and stuff it's Loading Artist.
Been listening to Jordan Peterson's lectures on youtube, watching video essays on films, the science/information related channels has already been mentioned here. I'd recommend "Blank On Blank"  it's wonderful.
The rest of my time spent on the internet is either habitual, i.e. Reddit/FB/YouTube for my "entertainment needs", or purpose-driven, i.e. googling relevant information for whatever projects I'm working and so accordingly is largely random.
I want to go to more places like this, and I tried slashdot, but I didn't understand their comment section and am incredibly passive. So here I am.
Youtube channels is a hodgepodge of whatever I am currently into. In a similar vein, I am a big fan of GoRails.
For strict information gathering, I recently got an Audible subscription and love it. I listen to music while working, but Audible I save for while I'm commuting.
Looking at ones i frequent, I have noticed a pattern to pay for services I use. I am also a privacy badger/uBlock user, but I still prefer to pay for services if it means no ads or a better experience.
Patreon - Chapo Trap House podcast
Other podcasts: In the News by Doug Henwood, the Kraken podcast, the Katie Halper show
reddit - r/machinelearning, r/keto, r/sorceryofthespectacle, r/chapotraphouse
blogs - high-fat-nutrition.blogspot.com, itsthewooo.blogspot.com, gwern.net
Occasionally I just browse through arxiv.org, and tbh I have a massive backlog of unread saved webpages in my Pocket account
I have RSS feeds for a number of different news sites including BBC, Reuters, Guardian, RT, Telegraph.
I have a number of different sites I don't visit daily, but visit regularly out of necessity, like stack overflow.
4chan (/v/, /tv/, /pol/)
Youtube (Mainly for music)
Youtube - as bad as certain aspects of YT are (eg, comments), there is a TON of great educational content on there, as well as music videos.
Reddit: Yes, the default subs are horrible, but there are a lot of great specialized subs as well.
Coursera: taking a couple of classes now
Facebook - not happy to admit this, but it's force of habit. :-(
news.google.com - news
arxiv.org/corr/home - CS papers
wral.com/weather - local weather
amazon.com - I'm on there either ordering books, adding stuff to my wishlist, or just looking up a book I might want to buy "one day", or checking on the status of an order, pretty much every day.
dilbert.com - lulz
phins.com/phins-urls.html - Dolphins news
digg.com/reader - feedz
Twitter (I have a rule of following exactly 50 accounts on a one in/one out basis because otherwise it's too unfocused to be useful the way I want to use it (which is as a quick/lazy RSS replacement)).
BBC News/The Guardian/The Daily Mail (reasonable cross section).
That's about it outside work related stuff/general programming stuff.
Listen to a fair amount of podcasts but I just go to their sites for that.
HN, Ars Technica, TechCrunch, and the local paper's website. WaPo if I feel like making myself mad at politics.
NOAA weather and Radar, AP News, Reuters News, Hacker News, Science Bulletin, Alltop Raspberry Pi, Facebook, and Willy n Ethel.
Sometimes I'll also take a look at Google News if I have time.
I have a pretty small and awesome group of friends on FB that share a lot of great stuff from a wide variety of sources.
Datatau Techcrunch Techradar Medium Product Hunt Popular Mechanics MIT Technology Review Hardvard Business Review Engadget Hackaday OReilly Radar The Verge Atlas Obscura Coding Horror Joel on Software
Chief Delphi for Robotics-related content (FIRST Robotics Alum, so it's an interesting thought pattern to watch as an outsider.)
HN, Hackaday and on occasion Slashdot for Tech-related content.
Fortune's Termsheet (usually just read dan primarks pro rata)
That's really all, also read Barstool Sports for fun.
Who reads Reddit these days? With the exception of some niche subreddits, it is bottom-feeder trash.
I use Feedly to organize pretty much all of it.
Feedly (more of a web app than website), Reddit, Hacker News and Slickdeals
Now that I think of it, most of the sites I visit are content aggregators and not individual sites.
NY times for regular news (worth paying for IMHO)
Board Game Geek for a hobby
Crunchy Roll for entertainment
NO so called "social" media sites
(edited for formatting)
Otherwise I go to Twitter, HN and The Guardian every day, plus Reddit, Amazon and Facebook every few days (often it's to wish someone a happy birthday).
I also like The Wirecutter for reviews, Authority Nutrition https://authoritynutrition.com/ for food info, Dilbert and xkcd for cartoons, and YouAre Not So Smart https://youarenotsosmart.com/ for essays.
goldprice.org to find out what is happening to this baseline.
yahoo.com for s&p, russell 2000 - market review
accuweather.com to get a prediction for upcoming weather.
bbc.com.uk for world service 5 minute bulletin
npr.org for 3 minute summary from one political perspective
drudgereport.com for another political perspective
dvorak.org for humor
here (hn) for IT-related info, trends/news - lower in this list due to possible time sync hazard
qz.com for their summary
rt.com for another summary
fee.org for economic/political discussion/inspiration
thefederalist.com for economic/political discussion/inspiration
mises.org for economic/political discussion/inspiration
dave.sobr.org for Dave's round up
zerohedge to see where conspiracy theory is heading (also outliers of factual trends)
antiwar.org for world political climate reporting
noagendanewsnetwork.com for conspiracy theory and factual trend outliers
a handful of comic websites for amusement including xkcd, questionablecontent, ScaryGoRound/Bad Machinery, DresdenKodak, GirlGenius, etc.
2. Getpocket.com - articles which i have saved inside of it from HN or from other places
http://www.ventusky.com to check the weather worldwide
http://www.xkcd.com for a quick procrastination break
economist.com (kindle only)
The Economist (via Facebook to circumvent their 3 articles limit)
my industry's subreddit
4chan /b/ /pol/ /biz/
a local blogger
each site probably 4-5 times a day
Never require a specific length of professional experience unless absolutely necessary. Instead require experience with certain areas of expertise.
The more specific an item is, the more likely it isn't a requirement and probably belongs in the "Bonus skills" column.
Avoid being that company which lists three different positions (e.g.junior dev, dev, senior dev) with the only delineating factor between them being X to Y years of Rails experience. I see that all the time, and it's a really good indicator that the company probably sucks to work for since they can't even figure out how to hire correctly.
Moreover, good engineers are typically stack-agnostic. You'll miss out on these people if you have narrow requirements.
1. A recruiter: Do I have a CV in my DB with these keywords?2. A referrer: Will my friend fit this?3. Candidate: What should I know? What should I do? How much do they pay? Is this the right move for me?
In some forums you just cannot split them up (LinkedIn). In some other, you can (emails). Try splitting them up. It will be a lot easier.
Do: think what they must not do (b/c there would be problems if they did) and write what they should do instead.
Sure, there are many situations where sacrificing performance in exchange for a VM is totally appropriate. If you think this covers 99% percent of applications (or even 50%!) then you may only be thinking of a very small subset of software development.
Also, inefficient code produces excess heat. Meaning reduced battery life and noisy fans. So all software that gets used a lot should be optimized for performance just to conserve energy.
But for hobbyist work, it is different. Free software developers are seeking universality more than anything else. They want as many people as possible to be able to use their code, be able to read it and contribute to it.
VM:s hinder universality. For example, if you write an image processing library in C then everyone can theoretically use it (assuming bindings are non-trivial to write). But if the same library is written in a VM language, then it is only usable to developers who are using that platform.
It's like a curse.
The story on power consumption of managed/VM language is still not clear. Most of the computation in the world are now happening in mobile/IoT devices and cloud/data centers; Both environment put a strong constraint on power consumption and therefore on efficiency. There is already a huge amount (and growing ) of native code running in the cloud. As our computational requirement increase (and unless we have a break through in computation efficiency) people might want to revisit the lost implied by managed environment.
The other side of the coin is that managed env. are popular because they usually bring safety, ease of programming and productivity. Modern C++,rust and D are showing that a lot of those attributes can be had with native languages too.
GitHub didn't invent anything. They only made a better UI.
SourceForge was more oriented toward software users. It handles the distribution of binaries. Imagine a time when 90% of software sites would redirect you to sourceforge to download them. Distribution was first. The repo and the issue tracker were in a secondary tab.
GitHub is oriented toward developers. It shows you the repo as the main page. You can't distribute binary releases (well, it was added recently).
GitHub took over by attracting developers right at the start of the project. They need a repo, here it is. UI is nice, site works. The new projects eventually become well known and carry the reputation.
SourceForge went downhill slowly with their shady practices. Ads, confusing pages and software repackaged with adware.
Richard M Stallman will tell you of the days when people mailed tapes back and forth, but that was in the 70s.
A key development was Larry Wall writing "patch" in the early 80s, which he posted to USENET. That made it much easier to start mailing changesets to the maintainers of programs. This workflow continued basically until Linux wrote "git" in the late 2000s. The idea of the pull request formalises the process of emailing Linus.
In the late 90s and early 2000s, most projects had their own CVS server and mailing list. Mozilla decided they would write Bugzilla to keep track of bugs. Sourceforge grew up as an ad-supported hosting and distribution server for CVS (and later SVN) repositories.
The diff program we all use today has it's origins in the 70s, although the unified diff format that we almost always use was created in the 80s.
Email was invented in the 60s, UUCP in the 70s, and Usenet in 1980.
Version control was invented in the 70s with SCCS.
Web-based bug trackers such as Bugzilla originated in the 90s, as did continuous integration software like Tinderbox.
Of all of these, Git represents the biggest improvement over it's predecessors, while email is pretty much still just email. The diff program hasn't changed since the 80s. Bug trackers and other such tools haven't changed dramatically either, although a lot more attention is paid to UX and polish these days.
I think the largest change is the wide availability of these tools today. Everyone knows about them, and it's seen as aberrant to not use version control or bug tracking.
Is GitHub that strongly associated with open source that alternate models for open source development are a mystery? Somehow that's really troubling to me in terms of the open source paradigm, even though I generally see GitHub as a very positive thing. I don't mean that as a criticism of the poster, just saying that it feels like maybe there's some room for more diversity and competition.
I think others have given pretty good descriptions of pre-GitHub models, so I'll leave that to them.
Netscape did a lot to move project management to the web. Bugzilla was written in the mid-1990s. Before that all bug reporting and issue tracking was done via email. If you were good you'd email a patch to the author to fix a bug or add a feature, just as people still do with Linus. He wrote git initially as an improved tool to merge patches received by email.
For source code, people typically used CVS or (later) SVN. The repos were hosted by platforms like SourceForge, berliOS or Savannah, or on the projects' own servers.
Releases were tarballs hosted on servers. End users sometimes got software by downloading and compiling those, but there were already package managers and repositories. Before most people had Internet at home, at least in France, you could buy CDs with Linux packages at the press store.
Communication between developers typically happened on IRC for casual chat and through mailing lists (hosted with mailman) for serious stuff. Sometimes there were web forums to communicate with users. And conferences, of course. A lot of projects were developed by people who were physically close, for instance people who met at the same Linux Users Group.
Some projects used bugtrackers actively, some did not. It was mostly Bugzilla or Trac. That did not really change too much with GitHub.
The main difference in my mind is that forking was usually regarded as something bad. You would not fork a project and then send pull requests to fix issues.
For a simple fix, you would generate a patch and send it to the project's mailing list, where it would be discussed and eventually checked in by one of the owners. If you wanted to really engage with the project, you would become active in the community and eventually get commit rights.
I think what led to that change of model is: cheap branching in Git, GitHub as a platform with users account, and maybe Continuous Integration making it easier to validate patches.
To your original question: sourceforge was huge, google code, cvs, bazillion of local "downloads.com" etc
Before then, code was often on people's private websites, or FTP servers, with communication over BBS, email, and IRC.
Just remember that Git was designed around the workflow of the Linux kernel originally. That's why there are commands like "git format-patch" and "git am" which have help messages like "Prepare patches for e-mail submission" and "Apply a series of patches from a mailbox".
It was also not that uncommon to see code patches printed in magazines or snail-mail letters.
Personally, I used to put them under my personal website, seperating each to a subdomain. If you'd like to see source code, you'd download it.
Before that was SourceForge.
A good example was CurseForge.com. They provided free SVN, Git, and Mercurial hosting for add-ons for several popular games, along with per add-on issue tracking and discussion.
Add-on authors could host at other, general purpose, hosting sites, but there was an advantage to using CurseForge. Curse.com had an application called the Curse Client for end users. The Curse Client was an add-on manager. It integrated with CurseForge, allowing you to handle searching for, downloading, installing, and updating add-ons from CurseForge right in the Curse Client GUI.
Curse and CurseForge are still around, and support a variety of games. I'm not sure what the deal is with repository hosting there now. I saw some documentation that suggested you are supposed to use an external repository and provide a link to it as part of your CurseForge project settings, but I also see a lot of projects whose repository is on curseforge.com.
Others would manage development through email lists. Everyone was good at using the diff & patch commands. Mail clients like mutt were great at searching and sorting email. Releases would go up to FTP servers.
In larger projects, there might have been multiple trees maintained. For example, get your patch into Andrew or Alan's tree before Linus would take it.
SourceForge, specifically, is basically the same as GitHub
And new releases were announced on Freshmeat.
Then you emailed diff patches to maintainers and prayed.
1. One of my goto articles: https://blog.ycombinator.com/minimum-viable-product-process/
2. Don't build a landing page with mailchimp and A/B testing and unbounce. Do something easy. By "easy" I mean easy for you to do right now. Your landing page is not your product. A landing page is, in agile terms, a chore with no points assigned and does not contribute to velocity.
3. Focus on something people can use. Mostly an email list is not that.
This is the single biggest piece of feedback I see for landing pages in user tests. Customers need to feel like it's safe to proceed, whatever that means for your product (signup, buy, etc).
Lots of things that laymen trust feel cheesy to dev types. Things like BBB badges, excessive checkmarks and lock icons, the norton badge, etc. SLATHER em on there. Go crazy.
Don't think of the landing page as a stack of services. It could be a wix site if you really wanted it to be. The goal is to get the people you're targeting to feel like they know enough about the situation to go forward, and that you're a good candidate to go forward with.
Say what your product does in clear and simple language.
Say what problem it solves.
Tell me the price, or have a clear link tithe pricing page. Don't make me hunt for it.
1. Make a list of the things your service offers customers.2. Make a list of the thing(s) you want from customers.
In your page, tell the story of your service, using the items from list #1 to get the desired result(s), list #2.
Also focus on showing instead of telling. This is a pretty common concept that most people without a writing background aren't familiar with. Imagine the difference between saying, "My service uses trusted web technologies to ensure security." and showing a collection of AWS, etc., icons.
I find this to be much much 'user-friendly" than any existing or possible app/software solution and call me a oldie but handing out a card makes me proud of sorts.
Edit : I apologize if this doesn't answer your question.
But as far as language features support goes ... Kotlin, Ceylon, Groovy, new versions of C#, most of the times the language features are never that far apart (and they definitely do steal all features among each other) and you choose based on library and tooling support, familiarity and popularity.
Kotlin will come out among the top w.r.t. tooling support, because JetBrains will support it in its ide and library support because of its java compatibility. The android announcement pushes its tooling story even further.
And Kotlin became good choice for android developers a long ago before io2017) Official support means a better tooling, nothing more
Alcohol: up to two beers at a date, happy hour, or other event. Three if it lasts more than 4 hours. A glass of wine if eating dinner with someone else. Probably averages 2-3 nights per week with any alcohol consumption. No negative effect on social life (though I do enjoy social events more when self-medicating for social anxiety with those beers). More than one drink does affect my sleep that night and energy levels for a couple days, but I haven't been hung over in a decade except for after that one wedding...
I was drinking around 2-6 lattes on any given day for maybe the past 2 years. Never had a problem. About 1 month ago I started having horrible acid reflux and general stomach pains, would wake up vomiting, etc. I went to the ER, discussed my habits, did some scans - and they told me to stop drinking coffee.
First week was hard. Second week I had no cravings and was feeling great. By week 3 (last week) I had lost weight (this was my only dietary change), I was feeling sharper mentally and I was no longer still half-asleep in the morning before that first cup. In short - felt a worlds difference.
I'm not against coffee now, but cutting it out of my life, even if it's temporary, definitely was the right decision for me.
(As for alcohol, I don't drink.)
Alcohol wise; I try not to drink during the week unless it's at dinner for business or a special event (birthday, anniversary, etc...) - on the weekend, either a glass of wine or a couple whiskeys on the rocks casually with the wife while watching a series or movie.
The only thing it's ever effected was money. Buying coffee at Starbucks or Tim Hortons on a regular basis is a waste IMO. Same with alcohol - cheaper to buy a bottle at home and drink it slowly then at a restaurant. Conversely, as you get older, it becomes (or has become for us) more important what you drink then the quantity - good stuff is expensive so you don't really want to blow through it quickly.
In terms of drinking, we usually have a bottle of wine or prosecco 1 - 2 times a week. I get one or two drinks whenever we go out for dinner so that is once a week. I don't think I see an impact, but I don't ever get drunk. I just get sleepy and I usually give in to the call.
Almost no alcohol - 1 every few weeks or months depending on circumstances. Party/reception or business dinner at high-end restaurant. And, then it is just one drink.
I am not against alcohol but very cautious around it. I have lost a friend to a drunk driver and had family members lose custody of their kids because abuse of alcohol ruined their ability to drive, work and function as responsible adults.
On the other hand I know plenty of people who drink alcohol much more regularly than I without any notable effect.
1 glass of watered red wine with dinner (my only meal each day). When going out, I will have 2-3 glasses of wine, but only once every two weeks or so. The rest of the time I'll drink Perrier or soda water.
3-4 glasses of water a day. More on workout days, but I find on a ketogenic diet my water requirements are less. I don't add salt to my food, and I cook all my meals. I don't use condiments either.
I don't drink tea, energy drinks, juice, smoothies, or pop. What I enumerated above is what I drink.
Very little alcohol, 1-2 drinks once every other week or so, often with stretches of a month or more with none at all. I just don't seem to enjoy it as much as many people do, although it is nice sometimes.
How does this effect others? Heck with them, this is the minimum functioning me.
Edited to change the wording of the third sentence.
I always have a coffee first thing in the morning, another in my travel mug on my drive to work, and usually make another when I get to the office.
Some mornings/extremely busy days I'll sub in a caffeine pill for that extra boost.
I usually cycle down my caffeine use a few times a year, going from my usual 3-8 down to about 2 coffees a day. I find this helps me from building too much of a tolerance and needing to constantly increase the dosage.
I really only drink alcohol on the weekends and even then not very much.
Alcohol...once a month but in large quantity. Usually go on a bender while barhopping/at a party with friends. Definitely need to shake that habit.
Once or twice per year I tend to take 1 - 4 weeks off from alcohol and taper down on caffeine significantly. .. sometimes down to no caffeine. It's rough going for a few days but afterwards I feel that I can't tell the difference between not consuming and consuming
Another 2-3 cups of black tea. No alcohol.
As for alcohol, it's always present at work and it's hard to not drink. I can't say no to free beers ;)
I drink, on average, 6 standard drinks per week (all beer). Usually after work and, in the last 3 three years, no more than 2 at once.
I drink a fair bit of alcohol; probably 3-10 servings during the week and 10-20 servings most weekends. Not drinking would affect my social life.
I wish there were more comments here, would be a cool survey for HN
This is considered low for myself and times in my life I have had about 2x this amount of alcohol/coffee. I am not saying my current consumption is healthy, that is just what it is.
I'll have a beer or wine or something once every 6 months or so.
It's a pain to keep to computers in sync with one another, set up exactly how you want, etc.
I have two laptops, as well.
2016 MBP w/Touch Bar (full specs)
Dell XPS 9560 (full specs), runs Windows 10
At home I have a Dell UP3216Q (32" 4K display)
and a pair of external keyboards and mice (a separate pair for each laptop)