Here's a rough summary of the findings:
-- Overall, in spite of there being a shortage of developers, there's a general reluctance to hire people without a CS degree.
-- In general, hiring managers were more open than HR / recruiters to the idea of "self-taught" candidates.
-- Startups much more open to hiring entry level folks without a CS degree than large companies who generally have more choice (and bureaucracy).
-- Among those who were open to hiring self-taught candidates, 100% said they would like to see a strong portfolio of projects that the candidate has built.
-- Greater willingness to hire for non software developer roles. e.g. I heard multiple stories of people without CS degrees getting a foot in the door as QA / testers, and then rising through the ranks into engineering (e.g. at Zynga).
I believe the GaTech-Udacity degree costs ~$7k, BTW.
The Immigration Control's computers will understand it, and you'll get extra points for an advanced degree. Megacorp's HR systems will understand it, and you'll get a different salary banding. When you decide to do an MBA, the Admissions Department's computers will understand it, and rank you accordingly.
As an aside, I carry a fair amount of personal bias after getting a CV from a lady who claimed in the headline she'd studied at Harvard, MIT, and some other big name I don't remember. When you dug in to it a little deeper, she had watched a few iTunes U videos from each. Yeuch.
 Github links on resumes: it doesn't have to be perfect, but not much time is spent reviewing resumes, so make sure your best projects are easy to identify and explore.
Part of the reason for this is while you say they are 'exactly the same' I think there is a lot of skepticism that this is true. With the university system, most of us got our degrees and have a better sense of what that degree means. If it is from a school of a certain caliber, we know the minimum statement that makes. For Coursera, that's just not as clear unless you've gone to the trouble of doing both. I believe a Coursera educated person can (and perhaps maybe often even is due to self selection, who knows) be more knowledgeable than a person educated more traditionally. I'd still see hiring a Coursera person as a bigger risk because it is less of a known factor.
As an aside, in the US system those sound more like Master's courses than undergraduate courses. This is part of the confusion on what Coursera should count as. No one wants to look into the curriculum themselves, see how exams were proctored, projects administered, etc. That's what accreditation bodies and institutional reputation are for. Coursera hasn't replaced that (yet).
Taking the credentials path is safer at least up through age 40 or so. You're less likely to end up struggling to get a good job, and you'll likely end up with an above average salary.
Taking the skills path is very difficult at the beginning and you can expect to be paid less than more credentialed peers earn for the same work. You'll have a harder time getting your foot in the door. You'll have to have stronger skills. The flip side is that your skills will be stronger in the long run. If you can build a substantial body of work and get "so good they ignore you", then you'll have or even create opportunities that are closed off to even the candidates with the prettiest resumes.
What's your risk tolerance and how confident are you in your abilities?
I am not sure how invested you are against working as a pharmacist, but I would humbly suggest that you at least do that for a while (perhaps 1 to 2 years). Being both an experienced healthcare professional and hacker/developer enables very wide career opportunities. You will be the most tech-savvy pharmacist in the department/company. You will be the most efficient in any kind of data analysis (because your peers are having trouble learning to use Excel Pivot Table while you are writing scripts that take the files as input and perform 1000 Pivot Tables in a second). You will be tasked to be the go-to person for anything remotely related to the million-dollar enterprise software the pharmacy uses. You will get to be involved in the most technologically advanced project the pharmacy is having (think automation, robots, electronic medical records).
In the startup world, the professional status gives you instant, significant positive reputation gap as compared to your usual competent-developer-without-domain-knowledge kind. Not to mention the advantage of having extensive domain knowledge should you manage to find an idea that somehow involves pharmacy.
After that, you can slowly think to get your CS degree (as I am thinking of getting in the near future), or just do the Coursera courses along the way. As you would have some experience working as a pharmacist already, this credential (plus all the experience being involved in pharmacy IT projects) would stay even after you get the CS credentials.
[PS: I'm in Singapore working in a public hospital here.]
I believe in the real world, you are best represented by a body of work and/or the ability to demonstrate that you are capable of tackling the problems associated with the job in which you are considering.
The world of information technologies is vast. There are computer scientists, software engineers, data scientists, test engineers, and many more.
It'd be best if you could narrow down what it is that you're interested in working on. I think a degree in computer science gives you a phenomenal foundation for any of the above, but it doesn't make you immediately in demand, particularly if you're missing a body of work.
I am a software engineer without a CS degree, but I've studied algorithms, some design patterns, and some math relevant to my areas of expertise.
That's my two cents, but I'm sure other people have some useful ideas as well. :)
What in particular would you change though? Which metrics do you want to see at a glance which are buried, which things would you like to see on an overall dashboard? It's easy to say something is confusing, but far harder to come up with specific recommendations in order to make it better. This is an area which interests me so I'm genuinely interested in your response.
Engineering/Management don't really do much to teach you how to structure/query data, so perhaps that's why.
How to install the current version of Go in Ubuntu?
This question appears to be off-topic. The users who voted to close gave this specific reason:
"Questions about general computing hardware and software are off-topic for Stack Overflow unless they directly involve tools used primarily for programming. You may be able to get help on Super User."
Go most definitely is a tool used primarily for coding, yet the question was closed for this reason by more than one person.
"and the people that are actually valuable are the people directing things" - how many jobs did you change? People and teams can differ a lot in different places. Some managers are not just talking well at meetings, but take responsibility etc.
Managing is nothing to be jealous of, it's mostly a dead end if you're creative. If your nature is better suited to academia and research then go do it, even if that means less money, happiness can't really be bought.
Also, resubmitting even the oldest stories will give karma to the original poster...
and the source:
Check the source on the examples page if you want to see the API thus far. While progress is being made, having other contributors (especially ones with WebGL, Three.js, or graphics backgrounds) definitely helps. Please please please let me know if you have any comments about anything related to the project. If you have any ideas for demo/example graphs, please share them! I'm getting tired of staring at the EVE Online universe :P
A couple visualizations I've done using 100% R + ggplot2:
Another good mention, in addition to D3, for client-side graphing is highcharts: http://www.highcharts.com/
I am a new faculty member and not yet working with PhDs, but if they put me in charge of PhD admissions, I think the number one indicator that a candidate could succeed would be "did they do a masters thesis?" and the number one indicator of whether they could handle a research masters would be "did they do an undergrad honors thesis?".
So my suggestion is, work hard to get straight A's, but also make a point of doing research projects. That might mean joining your school's honors program, or doing independent study courses, or working as a research assistant for a professor. Get your name on some published research, and (this is important) make sure you have an advisor (or two) who are active in their fields and who will be known to professors on the admissions committee at schools you'll apply to.
 https://github.com/intridea/grape https://github.com/tim-vandecasteele/grape-swagger
Thanks to this I have an up-to-date documentation ready at every build. It comes with nice sample data in both XML and JSON, descriptions of all the parameters/output including constraints, etc.
... and this blog post all about API documentation: http://codebetter.com/glennblock/2014/02/06/a-discussion-on-...
If you are new in the industry, you don't have people to vouch for you. That's why you get requests to see your actual work, rather than own cherry-picked code examples.
"I could do it easily if I just got the chance" won't fly if you are in a location where there are more developers than jobs. You'll have to make yourself stand out. The easiest way to do that is to build stuff. Doesn't have to be groundbreaking stuff, but it should work and be within your "specialty" language(s).
Then next time someone asks you for a non-trivial example, you can just send them a couple of your projects, rather than a couple of clever code snippets.
My current position I found through a connection, and that doubtless helped, but I've gotten jobs before through responding to university postings and craigslist ads. I've also been turned down at plenty of places that I've found both ways - for any given position, most of the time you won't get it (of course, since there are going to be multiple candidates).
So, make friends with people who have jobs in the industry and convince them that you have the necessary skills.
I hear you. Many times, it is not even you. Like you said, the hiring manager is probably too hung up on one specific item that they really think will hit the home run. Now, that depends on the situation. If they need an expert in a very specific niche for a 1 month contract, they probably care about that one thing. If they are looking to hire someone fulltime who can grow in the company, being hung up on that one thing is plain stupid.
"WTF do hiring managers actually want? "
I have been interviewed by tons of managers being a consultant. I would say majority of them are not always sure what exactly they want. It can change. For example, I interviewed once for a role which required a very specific vendor system experience in finance. Apparently, that system was so niche and new that they could not find anyone unless they poached from the vendor directly. So the manager decided to look at other "relevant" candidates. The problem: He had no clue what to look for. True story.
So don't get too upset about this. I say move on and keep looking. There are many great hiring mangers out there who not only understand what they want/need, they also know how to interview and find the right person without being too hung up on one thing or other.
"Programmers", "developers" and "software engineers" are essentially liabilities. These are the first to let go when things gets uncertain.
If you haven't written a full app in a language, can you really claim proficiency in it?
i guess this would help to some extent
get a good past job that they will recognize the employer name
and you will have an easy time.
Hiring, often times has biases. There could be any number of reasons: either technical or personal. Hiring decisions are often subjective, despite the fact that they try to be somewhat objective. And it's especially hard for people with less than 5 years of experience. Keep trying, you'll get it eventually.
For example, the semicolon (";") and equals ("=") reserved characters are often used to delimit parameters and parameter values applicable to that segment. The comma (",") reserved character is often used for similar purposes. For example, one URI producer might use a segment such as "name;v=1.1" to indicate a reference to version 1.1 of "name", whereas another might use a segment such as "name,1.1" to indicate the same.
EDIT: This RFC is for URIs and your question was about URLs. URLs are generally considered a subset of URIs, but according to this SO answer, that might be open to debate. http://stackoverflow.com/questions/176264/whats-the-differen...
As long as you seperate ads clearly from the site content and maybe give them a rel="nofollow" attribute, there should never be negative consequences.
Paying someone for low quality content around links to increase search engine rankings lowers the quality of the overall web for everyone.
Google does a lot of questionable stuff and I personally don't like the power they weild over the web. However, in this particular instance, I can't see anything wrong with this policy.
You own a website, I own a website. I pay you $100 to show your visitors a link to my website. The link is presented as an organic, non paid link.=BAD
You own a website, I own a website. I pay you $100 to show your visitors a link to my website. The link is presented as a paid link, with a no follow attribute.=GOOD
On a side note, your breakdown of the Ad Revenue using Google as a middleman is wrong.If you pay Google 100$ (via Adwords) to decide to show ad on my site, I will get 68% of that 100$ and Google will get 32%
Adense revenue share: https://support.google.com/adsense/answer/180195?hl=en
I would expect an anti-trust case in the coming few years.
Buying links in order to 'cheat' your way to the top of Google's search page, thereby skewing the accuracy of their results, isn't fine.
I'd liken it to Ford paying 500,000 people to drive a Ford car and then claiming to be the #1 best selling car in the country. If they did that publicly it'd be ok (and compilers of car sales listings would ignore them). If they did it secretly then it really wouldn't. Tagging a link with 'nofollow' essentially makes it public that the link isn't trying to cheat the listings.
The whole concept of "link juice" is no longer useful. Google should identify and count real humans visiting web pages via GA and Chrome and rank search results based on actual website usage, and not on how well they can cheat in SEO.
Google is completely free to have their algorithm work however they want to provide the best possible results.
(Personally I think using paid links as a signal for good websites is unlikely to improve results. You may not agree with this, but that is separate to the issue as to if they should be free to implement their algorithm however they like)
Also, Google only keeps 32% of the ad revenue not 60%:https://support.google.com/adsense/answer/180195?hl=en
We should also mention that Google tells people to "merge" adsense on the website, so it doesn't appear to be an ad, inducing people to think that it's part of the website. Have you ever been on a download website with ads with graphics saying "Download" right next to the button just to make confusion and make you click on them? Yeah, I see plenty of those using adsense.
You are not allowed to pay to increase your ranking.You can buy ads on Google or another site and that's ok as long as they are marked as ads.
IANAL or an insurance agent and this is not advice, just my personal experience.
2. PL isn't expensive typically they rate it by your last 12 months of revenue. We do $10M+ last year and our PL premium is $1900 a year.
3. Never heard of this... Call you're ins company.
4. They might be able to waive the WC if you are both owners of the company and you don't have any employees.
I am 42-year-old very successful programmer who has been through a lot of situations in my career so far, many of them highly demotivating. And the best advice I have for you is to get out of what you are doing. Really. Even though you state that you are not in a position to do that, you really are. It is okay. You are free. Okay, you are helping your boyfriend's startup but what is the appropriate cost for this? Would he have you do it if he knew it was crushing your soul?
I don't use the phrase "crushing your soul" lightly. When it happens slowly, as it does in these cases, it is hard to see the scale of what is happening. But this is a very serious situation and if left unchecked it may damage the potential for you to do good work for the rest of your life. Reasons:
* The commenters who are warning about burnout are right. Burnout is a very serious situation. If you burn yourself out hard, it will be difficult to be effective at any future job you go to, even if it is ostensibly a wonderful job. Treat burnout like a physical injury. I burned myself out once and it took at least 12 years to regain full productivity. Don't do it.
* More broadly, the best and most creative work comes from a root of joy and excitement. If you lose your ability to feel joy and excitement about programming-related things, you'll be unable to do the best work. That this issue is separate from and parallel to burnout! If you are burned out, you might still be able to feel the joy and excitement briefly at the start of a project/idea, but they will fade quickly as the reality of day-to-day work sets in. Alternatively, if you are not burned out but also do not have a sense of wonder, it is likely you will never get yourself started on the good work.
* The earlier in your career it is now, the more important this time is for your development. Programmers learn by doing. If you put yourself into an environment where you are constantly challenged and are working at the top threshold of your ability, then after a few years have gone by, your skills will have increased tremendously. It is like going to intensively learn kung fu for a few years, or going into Navy SEAL training or something. But this isn't just a one-time constant increase. The faster you get things done, and the more thorough and error-free they are, the more ideas you can execute on, which means you will learn faster in the future too. Over the long term, programming skill is like compound interest. More now means a LOT more later. Less now means a LOT less later.
So if you are putting yourself into a position that is not really challenging, that is a bummer day in and day out, and you get things done slowly, you aren't just having a slow time now. You are bringing down that compound interest curve for the rest of your career. It is a serious problem.
If I could go back to my early career I would mercilessly cut out all the shitty jobs I did (and there were many of them).
One more thing, about personal identity. Early on as a programmer, I was often in situations like you describe. I didn't like what I was doing, I thought the management was dumb, I just didn't think my work was very important. I would be very depressed on projects, make slow progress, at times get into a mode where I was much of the time pretending progress simply because I could not bring myself to do the work. I just didn't have the spirit to do it. (I know many people here know what I am talking about.) Over time I got depressed about this: Do I have a terrible work ethic? Am I really just a bad programmer? A bad person? But these questions were not so verbalized or intellectualized, they were just more like an ambient malaise and a disappointment in where life was going.
What I learned, later on, is that I do not at all have a bad work ethic and I am not a bad person. In fact I am quite fierce and get huge amounts of good work done, when I believe that what I am doing is important. It turns out that, for me, to capture this feeling of importance, I had to work on my own projects (and even then it took a long time to find the ideas that really moved me). But once I found this, it basically turned me into a different person. If this is how it works for you, the difference between these two modes of life is HUGE.
Okay, this has been long and rambling. I'll cut it off here. Good luck.
Until this one project where we were asked to 'fix' an already written Android app (written by an Indian outsource then sent to Canada). The contract was for a massive amount of money, everything looked clear cut and straight forward, how could we say no?
For almost 7 months (!!!) my team and I had endless meetings next to a wall map containing the 5000+ classes that each had to be dissected, understood and reimplemented properly. All the comments were in at least two different foreign languages, and even the best translation services (human included) could only give us at best translations like: 'not class, forwards' or 'use brick making way here', most likely due to the comments being poor in their original language in the first place (not due to the translation).
At first I had great momentum, I was an unstoppable force; then quickly things started slowing down - each task started taking hours longer, than days longer, than weeks longer. Ultra trivial fixes like the placement of one statement outside a try catch, could easily take a whole month to locate (by a team of 4!).
After pouring my heart and soul into this project day after day, grinding myself literally to the bone; I started getting depressed, physically sick to my stomach for days at a time, starting fights with co-workers over absolutely nothing, just so I wouldn't have to look at that fucking code one more time. Anything to just not look at that code one more time.
By the end of the project (which we did actually manage to complete), I was waiting for that moment of euphoria, that release of completion, that I would never ever again need to look at that code, or work on that project.
But it didn't come.
I was paid more than 100k for completion of the project, so I was well reimbursed for my time.
That's when I realized that it's really not about the money, it's not about the team, or the language; It's not about your repo, or your source control techniques. It's not about agile, and it's not about problem solving. It's not about working from an office or from home, and it's not about the mother fucking 'culture'.
When you're lying on your death bed, and you look back; will you be proud that you spent all that time and suffering to fix an app for some asshole who is trying to make a quick buck by exploiting people who aren't technologically wise enough to realize what they are doing?
The next day my boss asked to meet with me privately; thinking I would be fired (and happy with the idea) we met briefly at a local coffee shop. She said that all the anger, depression, and self loathing was 'worth it' because 'I made a lot of people rich' in the process (myself included) and they were happy to deal with that (and even to pay for therapy).
I was offered EVEN MORE money to continue working on projects exactly like these, to the company we had just discovered a cash cow of an app crop, and I was the golden goose. I could easily do this the rest of my life, and lead whatever life I wanted to outside of work.
I quit on the spot, and laughed and cried the whole way home. Knowing that I would be blackballed in the community that I had worked so hard to establish myself in.
Literally career suicide. The company didn't recover, and a lot of people were (and still are very pissed off with me - like angry emails, restraining orders, fucking pissed).
I promised myself that from now on I would only do work that I believed in enough to starve to death for (and it was looking for a long time like that was going to be the case). The truth is, if you want a job where you can make 6 figures (or even 7 if you're doing it right), you will find it. You will always find it, and they will always be there.
There is a vacuum of talent on the community of expert programmers caused by major corporations like ibm, amazon, facebook, twitter, and snapchat just filling up cubes in their 'programmer cluster'. A group of people they can throw whatever stupid, or trivial tasks at - and you won't say shit, because damn that pay is tasty. You're breaking peoples rights to privacy, doing WAY less than ethical things, and you probably don't even know it (because that's how it's supposed to work, or someone else above you clearly isn't doing their job).
My only advice is to get the fuck out. Run, run as fast as you possibly can and never look back.
Never respond to any recruiters for any reason, never respond to job offers, and don't even think about looking for another position at another company (I promise it's the same thing, no matter how they promise you otherwise, and tell you that their culture is the dopest - nothing like clubbing seals with some rad people right?).
Get off your ass, and do something worthwhile. If you can't do that, then learn how. If you can't do that, then you're a drone and you should keep that shitty job because it's the best you're ever going to do (in which case, fuck you, you make the world a worse place for everyone by whoring your skills out to unethical assholes for cash).
Make something that garners zero profit, make something that only helps people, make something that changes the world for the better. You will quickly see your entire world, and all the people in it change before you eyes. You will get more job offers in your inbox than spam, because the world will see that you don't give a fuck about anything but getting shit done and helping people.
Today I run a few companies, the largest of which is a NPO machine learning research firm offering free services to help cure cancer, track missing children, follow and assess viral outbreaks, and front line ML research pushing the needle of science forward (email: freeML@gatosomina.com for services); and some of the others include: organic vegetable gardening as a service (physical outdoor labour, everyday, which I enjoy more than anything) and free apps that assist paramedics and doctors (without ads or bullshit).
If you want to be happy, like, really, actually happy (and not just wealthy) you're going to have to risk it to get the biscuit; and it's going to be the hardest battle you've ever fought in your entire life, by at least a few magnitudes.
Good luck, it's a jungle out there.
If this sounds like it could be your style, grab a buddy and see if you can hammer out some of the small stuff together. If not, some of the other suggestions here are good as well.
First of all, isn't it a bit dramatic to say "your entire being opposes" your task? It's not like you're out committing genocide or something. You're programming, and you have to work on a crappy programming task. Every programmer who ever worked a professional job has had to do this at some point. If the very fiber of your soul is wrapped up in your employer's MegaAccounting Client V3.0 REST API, I'd recommend re-thinking your emotional attachment to your job.
That money you get every two weeks is called "compensation" because it is compensating you for your time, which you would probably otherwise spend doing something more pleasant. This is the realistic world of grown-up work life.
If your company's Marketing bone-head says the customers want a green oval button instead of a system-standard button, well, it's stupid, but I'd laugh at how much they're paying to get this ridiculous code written and just write the damn code. It's really not worth losing sleep or sanity over. Not being emotionally attached to your work allows you to shrug off the stupid stuff that Really Doesn't Matter.
I struggled with this for years and years. This is not one problem , but three: it is a problem with wisdom, speed, and discipline.
Luckily, we can learn tricks to improve each one.
If we want to attack this from the wisdom perspective, it is this: You are afraid of making the wrong decision because you are afraid to refactor. You are afraid to refactor because you don't have sufficient test coverage.
The good news is, for developers like us, test driven development is very helpful as a technique for getting us over these problems. If our team is not test-friendly, however, it will be difficult for us to make the jump because their code will not be written in ways to make it easy to test.
There are a few books I can suggest to help us jump the chasm:
1. Clean Code by Bob Martin. This book helped me think in more testable code, and also helped me understand how to make better decisions the first time around. It helped me by seeing patterns I didn't know first.
2. Refactoring by Martin Fowler. This one is old, but knowing the patterns of changing code gives us more confidence in knowing what is right, rather than hemming and hawing over what is readable and maintainable.
3. Refactoring From Legacy Code by Michael Feathers can help get from here to there. All of these help from three aspects: They help us develop a set of tests so we are less afraid of breaking existing things, they give us the freedom to experiment, and they help us break things down into smaller, more manageable problems by letting us think about "what is the next thing I can test?"
If we have the tests, we can be more aggressive in reducing complexity.
If we want to attack this from a Speed issue, then look for these things.
1. Look for patterns you use repeatedly, and try to settle down into a process. The fewer choices we make, the faster we can go.
2. Look to learn more about your chosen stack and language. It is possible that we are rewriting the wheel over and over. The more you understand the zen of your stack, the faster you can go and the more time you can devote to writing the same thing twice (without them knowing.)
3. Instead of hemming and hawing about the right solution, write all three. It is often faster to write all three and choose one than to get stuck in analysis paralysis. (That isn't to say you shouldn't think before you write code!)
Finally, you can attack this from a discipline angle.
1. Learn to meditate. By doing so, you can become more self-aware of analysis paralysis, calm your mind quickly, and mindfully choose a path.
2. Exercise. In the same way as meditation, exercise helps us learn to clear our mind and focus on command, and it helps sharpen our discipline chops.
With these, we can develop an awareness of how our body feels. Then we can develop an awareness of how analysis paralysis feels. If we can catch ourselves in the act, we can then institute something from our analytical skills: When caught in the trap, set 30 minutes on your timer, and bring out a pad of paper. If you feel you have the freedom, turn off the monitor.
Take deep breaths, and sketch out the solutions in the first ten minutes on the first page. Use UML or your own system.
In the next ten minutes, write a pro/con analysis on each path.
In the final ten minutes, make the decision. After this, your analysis time is up and you must code.
I suggest a combination of the above.
Good luck! It was one of the hardest things for me to defeat.
But I do encounter many chores in my work that are boring, that are bad ideas, that are for difficult customers, or often all three. I can have the same problems getting those tasks done, just like you describe. Actually, you seem to be way ahead of me because it took my far to long to figure it out. I thought I was losing my ability to program. I was wondering if I was going to have to find another career because I had lost my ability to concentrate. I was reading books on getting things done, and concentration and trying to figure out what the hell was wrong with me. I would sit down to do a task, check email, check reddit, check hacker news, check reddit, get coffee, go to the bathroom, check reddit, "Arg! I have shit to do!" Check reddit, check IRC, etc. I caught myself more than once closing a browser tab with some distraction, pausing for a half moment to organize what I should actually be doing and then open a browser tab to the same thing again.
The insite came when I finally got something engaging to do, and I just powered through it. I could still program! How did I get in the zone? How do I get there again when I need it? Well I worried about hat for a while, thinking there was some combo of sleep, nutrition, environment and task management software that I could line all up and get back to "the zone". It finally dawned on me that I subconsciously find distractions to avoid doing things I don't want to do. What a revelation.
How do I get over it? Well I still struggle with it, but simply identifying the problem was a huge step towards fixing it. Here are some techniques that I use:
Pomodoro technique. This is a productivity trick that actually works pretty well for me. The short version is that that you make a list of very small tasks, then work for twenty minutes (straight! no phone, no emails, no coffee, no bathroom), then take a five minute break. This helps with distraction problems because you can tell yourself, "I can goof off in 7 minutes". It sounds like a lot of interruptions, but I'm amazed at how much I get done with it.
Creating crisis. I work harder with the Sword of Damocles hanging over me, so I put those swords there myself. Call me back at 2:30 and I will have this done. Then I'm good for two hours of, "oh shit, oh shit, oh shit," type production.
Pair programming (and rubber ducking). This really helps to power through crummy tasks. Unfortunately, I work from home for a tiny company. I don't have anyone to program with. But if I am really stuck, I can ask my wife to sit next to me, while I explain what I am doing, and what I am trying to accomplish, and the details of what I am coding as I code it. I can use this occasionally to get over a hump.
Change of venue. I have struggled to find some shitty bug in some shitty spagetti code for a crappy website selling stupid things for WAY too long. The only way I broke through was to take my computer somewhere else, in front of other people. David Sedaris has a great story about a book suggesting he make a change in his house to help him quit smoking. Buy a new couch or something in order to change the venue. In our comfortable habitual surroundings we act in comfortable habitual ways. So he moved to Japan to stop smoking. I can't do this every day, it's just for breaking major blocks.
Anyway, I need to get back to work. Good luck!
Is waste really the right word here?
They don't see how many hours I have wasted, how unmotivated I am. Instead they treat me as one of their most valued employees (oh the irony!).
"When given a vague, annoying feature to implement, very carefully considered approaches and built it in a surprisingly readable and maintainable way"
What you're experiencing isn't atypical - sometimes programming something sucks! Your employer values your ability to power through it and still get good results.
I'm a manager, and sometimes I feel like you. Sometimes I need to ask developers to do things I don't believe in or things I'll throw away in a few months. This also demotivates me. You need both a lot of discipline and just a bit "aloofness" to keep going. Care less about those tasks, think about friday.
If your managers are any good, they know you have wasted hours, they know you are unmotivated, and they know those meaningless tasks are the reason, this is why you are a valued employee. I'd rather argue to death with an employee because he thinks his idea is best for the company than one that will just accept any task like a robot. But sometimes you have to implement ridiculous things into software, from clients being just crazy or because of some strange contract clause. This is when discipline kicks in. Such situations shouldn't happen often, but if they are, that's when you should move on.
You don't need to get "in the zone" to get the job done. Just start by doing smaller pieces, put your headphones on. You could just ask why feature is being built, but I doubt knowing the reason will motivate you at all.
1. If I'm working on something vague, try to extract more information about it. It's very hard dealing with frequent changes on a complex code base. I'd try to find out who the stakeholders are, customer is, and most importantly, what they are trying to achieve that this serves.
2. Break it down into smaller tasks and measure myself against these. I want to leave work having completed something and not return to work knowing I didn't complete something.
3. Try bringing a colleague in to help you, such as talking through the existing code and bouncing ideas off them. The energy a colleague puts in can help with motivation.
4. Make sure there is an end to it and that it's not an open scope. You'll never finish something if the stakeholder doesn't know what they actually want.
5. If this looks like it's the norm and you're not happy, while you say you can't change jobs now, put the plan in motion for when you can. Think about your CV, learning new things, etc that help. When the time is right you want to be ready to jump.
6. Get enough sleep. I find I procrastinate more when I'm tired. Of course, eat healthily and exercise.
7. Try to remove other distractions, such as any other commitments at work as a 10 minute interruption can cost you an hour if you're not in the flow of the work.
As far as I know the only way to get over burnout is to stop. If you do not you will suffer more. I wish I had better news.
But, enough on that. A few years before then, I felt like you did, but I wasn't actually in that situation. There is a very real positive feedback loop in effect - you feel like you're doing a bad job, so work longer hours on it, end up taking longer, feeling like you have "wasted" hours, and feel worse about doing a bad job.
Believe your employers when they say you are doing great, otherwise you're likely to be heading down the burnout route which had me off sick for half a year. It's not every coder that has such high standards as you, and that is not something to be ashamed of. Be proud of the code that you have produced. Think to yourself "It's just as well I wrote this bit, because if X had, it would have been awful".
I know this sounds like extreme arrogance, however sometimes it is necessary for the purposes of regaining balance. It sounds like you are being a little too humble. If it gets too bad though, get some help from someone.
Dealing with a rough situation that you have no external control over is one thing, dealing with a lousy job you do have control over it. Let go, walk out the door, and look for something more fulfilling.
Those conversations have taken my team and I to interesting places. I've discussed brand positioning with developers, and shared spreadsheets of time-to-value models with designers, at times going far outside of people's skill sets and comfort zones. If someone insists a piece of work is a bad idea, I invite them to argue against it but insist that I need them to make their case rigorously. Sometime they'll convince me, sometimes they don't want to work through the reasoning, sometimes I'll try and develop their case and argue against myself. I want to reach a position where we either change the task, or we're both satisfied that the task should be done. If that's too hard, then I'm after a position where they at least have rational faith in my request and my reasoning, and are ok to do the work on trust.
I spend a lot of time on this, for a few reasons.
First, I don't want to ask anyone to do something meaningless. Burnout isn't caused by workload. Workload causes exhaustion. Burnout is caused by resentment. If my team resent their work, that's a deep and important problem. I'll tolerate a only very small amount of that, but I'll let everyone know I'm conscious of it, don't like it, and am working to get away from it. Burnout is toxic and damaging to people and the group as a whole.
And secondly, this kind of explanatory work strengthens everyone's investment in the team and the work. It strengthens the team's ability to think together. As people become better informed, all of our discussions become richer and more valuable. People enjoy the work more, and can relax and trust each other more, knowing that decisions are made in ways they can understand and agree with.
Finally this is also a litmus test for me. If a company won't let me in on it's decision making, dismisses my concerns as unimportant and tells me to just get on with something, they're indicating they don't value the team in the same way I do.
Pick things that incidentally accomplish the assigned goal. For example,
1. Pick an amount of time, like 3 hours, repeat this cycle
2. make a branch
3. implement the feature in the fastest way you can
4. think about why this isn't acceptable
5. throw away the branch
6. do it again avoiding one thing that made the last one crappy
Also, weighing merits of different solutions and picking one is your job -- no need to feel bad about that. Come up with an assessment tool that will help you decide. Time-box decision making, but don't stop thinking about your solution -- just give it the appropriate amount of time, not unbounded.
Making progress is motivating. You want to end up at the same place but have the feeling of progress making throughout the process. I believe that it's possible you are taking the appropriate amount of time to do the work at hand, but you are getting into an anxiety/depression cycle because you can't get into a flow state.
2.) This is surely arguable, but I think agonizing over a lack of satisfaction/motivation in a job is likewise a waste of time. If you can get those things at work, great - if not, don't try to force it - redirect it to side projects, friends, family or hobbies.
3.) Life is really short and full of trade-offs. Be sure to regularly re-evaluate your position or you might find yourself stuck rather than simply compromising.
>'How do you get in the zone and get it done when your entire being is revolting against the task?'
Through each of the things I described above. Whenever necessary I remind myself that:
* I'm a provider and professional, my family depends on me and I'm paid to do good work - getting this done is not optional.
* My time is short, delay buys me nothing.
* I have no shortage of great things to look forward to when I'm done.
Next summer, I figured if I only mowed one lawn a day, I'd make the same $$$. Ended up mowing 10+ lawns a week at $25-40 a piece ( I averaged ~$20 - $25/hr depending on the week ). My favorite move was to go to my customer's neighbors and say "Hi! I'm cutting Sam's lawn for $x. If you let me cut your lawn for $x - $5, I'll knock $5 off Sam's lawn as well. Get your lawn cut and save your neighbor some cash." That worked pretty well and kept my transit time down.
Even if you take a min wage job for stability, try contracting yourself out a bit on the side and bank that cash. You'll get where you're going quicker.
I grew up in a small desert town with not much room to grow. The opportunities there were limited for what I wanted to do, and I knew that if I was still living in that town when I was 40, or even 30, I wouldn't be happy.
Being the procrastinator that I am, I knew that I had to take action immediately, or I would inevitably fall into a lull of complacence: a mediocre job, a girlfriend, a dog? And then I would be stuck; eternally glued to this town that I hated by second-rate obligations. (Not entirely true, people make drastic changes even with other obligations all the time, but it's not common.)
I was (and still am) young, and I believe that you should take as many calculated risks as possible when you're young. Do it before you have a mortgage, a spouse, a kid. It's so much easier then, because failing doesn't mean letting your child go hungry, or losing your home and living on the streets. Worst case, you have to move back in with your parents (assuming they're supportive).
When I'm laying on my deathbed and analyzing my life, I would rather regret trying and failing to achieve my dreams than regret not trying at all. When it gets right down to it, I don't think I would regret failing one bit. Failure is part of life, and since I've moved here I've failed plenty of times. Probably more times than I've succeeded. But the value of my few successes outweighs my many failures, and that's the key.
I've gotten a good job, learned and grown more than I would have imagined possible, met dozens of amazing people, made lifelong friends, co-founded an organization, and I'm happier than I've ever been. Not only that, but I'm excited for the future.
I've still got a long way to go, but I'm so glad that I had the courage and drive to go out of my comfort zone, into a completely foreign situation, all alone, and just do it. Granted, I was extremely lucky to have the full support of my parents and family, but even if I hadn't I think I still would have gone out and done it.
Of course, this is not advice for everyone. It's not really advice at all, just my own experience. Yours may vary. Best of luck.
Also, learning programming before enrolling in a CS program is from my experience the best path to not failing out. Professors do not really teach programming. They give assignments and do their best at lectures which doesn't really help your brain think programmatically.
Personally, I wish I started a program of autodidacticism earlier. Teaching myself about business & technical subjects that interested me. Also, make a habit of reading biographies of great men. Tremendous lessons can be learned that way.
Finally, read up on Goal Setting and implementing your action plans. *You've got less time than you think. Get Going Now!
Think about the other stuff you're probably planning to do with the next decade: work some entry-level jobs, live with your parents, sit on the sofa, play a lot of video games, etc. Why not drive a submarine or work with satellites or something instead?
At the most I separate into two generic folders: code and business.
Self-hosting possible, Dropbox sync, tags+tasks+search, Markdown support, clean UI.
And then of course there is Basecamp.
Support - have someone monitor it
General office phone - employ an answering service. A human should answer phones for business image reasons.
Infrastructure - design it right. Assume that fiber to your datacenter can get cut any second. Now what? Provision remote storage in case local drive dies. Boot the OS into RAM so if the local drive dies it won't affect your server. I am going a step further and configuring everything to boot from PXE using iPXE. The goal should be that a monitoring script that hasn't received a heartbeat can reset your infrastructure.Payments - have multiple payment methods defined for your critical services, prepayment may help.
As long as the infrastructure can reset itself and your phones are answered and support is handled, enjoy yourself.
This is how my processes are setup, but my product is relatively simple so support is usually not an issue. However, I rely on so many APIs that getting all that robust enough for me to be confident to take a break was a significant challenge.
As for taking vacations with my startup... I just left. But my startup is mostly automated and doesn't require much direct input from me. If I stop working or disappear for a bit, nothing bad should happen other than a server crash (which hopefully my setup will recover from). I won't get any marketing, or new features, but I am just providing an informational site. So really, it tends to just stagnate if I'm not working on it, but not decline.
However, when you say "remote" places, do you mean places with absolutely no internet access? If that's the case, you're going to have a tougher time. But there are really few places in the world that don't have internet access.
I recommend you read a book called "Work the System". It will teach you step by step how to create processes and train people to run aspects of your business that either you don't want to do yourself, or can't do due to travelling, etc.
That is why you need a team.
It is a high quality and popular vector drawing app (4+ stars on app store) and the code is clean and simple to understand. I am not sure you will learn anything by just reading through it if you're not building a similar kind of app though.
Quick googling also yielded these lists:
How to architect your app really depends on what kind of app you're building.
If you're looking to write native apps, Android is open-source, and iOS closed source, but they've got a lot of documentation available, albeit verbose at times.
Having said that: we're making an announcement about the crypto challenges today (all good stuff). If you were already in the challenges, you'll get it; otherwise, you may need to wait a month or so.
I use TrueCrypt volumes to store personal files like scans of passport, credit card info, 2FA codes, etc.
These volumes are then on NAS or USB sticks, though a couple are in Dropbox for emergency remote access (those 2FA codes).
I primarily access everything via Linux, but the emergency scenario means I would like to be able to access via Windows and/or Mac.
I'm looking for super-simple, and ideally packaged binaries that do not need elevated privileges to run... as these deal with the emergency scenarios.
I doubt there'll be a good alternative anytime soon. I'm guessing the data is sensitive enough that you don't want to experiment with tools that aren't widely adopted.
Linux: dm-crypt for FDE, gpg for files -- or dm-crypt with loopback volumes.
Windows: BitLocker for FDE (unless you are a potential US IC target, but then why would you use an OS from a company who has a proven history of being eager to work with the US IC), gpg for files.
For instance, I could 'upvote' this article but it would not be counted (I know, because if I refresh the page the count has not changed). Similar vote suppression mechanisms exist for articles, article submissions and for flagging content and users.
It's a crappy situation, but it works, don't sweat the points and enjoy the content.
If you are interested, have a look at chapter 4 of Probabilistic Programming and Bayesian Methods for Hackers .
This seems to be designed to reward people who make consistently good submissions and comments, although it also has the bad effect on making it quite penalizing to make a comment that goes against the groupthink.
I think that other factors that may have an impact are age of your HN account, and your total karma count. So long story short votes by older accounts that make quality submissions and comments are worth more.
How is a user's karma calculated?
Roughly, the number of upvotes on their submissions and comments, minus the number of downvotes. (The numbers won't exactly match up, because some votes aren't counted to prevent various types of abuse.)
When you create a post you automaticly upvote it, this upvote doesn't count for your profile score, if anyone else upvotes you, you get 1 profile point. If anyone downvotes you, you get -1 profile point.
Someone with > 500 profile score can downvote you.
Edit: The one downvoting me, could you elaborate what isn't good about my answer?
So it's a magic act. As a programmer, this frustrates me terribly. I just emailed dang yesterday because I had submitted something that shot up, got a lot of attention, then died just as suddenly. Hell, I didn't know, I thought the system was broken or something. Turns out I was flagged.
The upvote thing you mention is especially annoying. You click the little button, you're expecting something to happen. That's the nature of clicking little buttons on computer interfaces.
Hell-banning also drives me nuts, for similar reasons. Computers should serve us, not the other way around. [insert long discussion here about having to manage a site with a zillion users, and how it's easy for me to rant about this but I should walk a mile in dang's shoes, etc.]
No idea what's going on, whether it's voting changes or what, but something seems to have changed.
(b) You are required to pay yourself a "reasonable" salary, and the IRS gets to determine what "reasonable" means for your profession.
(c) You probably aren't going to save that much money.
(d) As I understand it, the ratio of dividend income to salary income is a potential audit flag.
Talk to your accountant. (If you're a sole proprietor or have complete control over your compensation, it may have been a mistake to set up a C-corp to begin with).
As for how you pay yourself a dividend: you simply write yourself a check, the same way you'd cut a distro in an LLC.
Google Double taxation for more info.
Disclaimer - I am not a CPA or even play one on TV.
Don't approach the interview as an audition, it's not. This conversation should be a two-way exchange of information.
Consider first the interviewer, what's their specific role and background? Are they an influencer in the process or decision-maker?
Just as a physician will perform a patient examination, before prescribing medicine-- can you probe for stated and unstated needs? Can you ascertain what they're trying to accomplish? Any particular areas of pain?
Those insights will help you show-off your talents with the right person at the appropriate time.
It's true that discussion of your portfolio and past work, and how it reveals your way of thinking about things and how you can tackle the company's problems, is likely to better convey your ability and value. A smart hiring manager will include topics like this in their interview. A smart candidate might find ways to inject this into the conversation.
The bottom line is that the interview process is time consuming, expensive and often not the aspect of your job for which you will be held accountable for (i.e. you get fired if you are unable to recruit).
An interviewer in such a case, has no incentive to carefully think about the process. Usually the interview time during his/her day is not the prime task at hand and he/she has to run to "other meetings".
In such an environment and time constraints, We come down to our rote notions of what "intelligence" means.
If you are interested, I would recommend these two very well written articles:1)http://code.dblock.org/five-ways-to-torture-candidates-in-a-...2)http://code.dblock.org/how-to-reject-engineering-candidates
Lastly, I wish you luck if you are a so called Front End engineer or worse, a female engineer in this industry. Its really rough out there for them in special.
Now, if you'll excuse me, I have to go and practice my bit manipulations.
I don't know much about Enyo, but one important thing is that we think that no framework should be needed to build apps for firefoxOS. But I'd like to know if enyo apps can run on fxos. The UI of the phone itself (called gaia, https://github.com/mozilla-b2g/gaia/) is pretty much framework-less.
webOS didn't make it as a platform for various reasons: lack of devices, no strong community for instance. Mozilla is in a way better position here.
In this world, it's not uncommon for people to present sub-contractors in this light. I personally don't think this is the optimal setup, and if I were in your shoes I'd not want all my eggs in one basket, so to speak. But as long as things are what they are, I don't see much harm in going along with this.
If I were in your place (from what you have said), I would not agree to misrepresent your relationship with this person and furthermore I would seriously reconsider whether I would want to continue to deal with someone who is willing to do this. It would be hard to believe that I was not being mislead by him. A reputation is easy to lose and hard to recover.
Let's say you agree to his wish. What's in it for you? A promise for more projects in the future? Maybe, as long as you agree to present yourselves as his company. The only reason I see why you would agree to his wish is fear (of loss) and there's something I learned with great pain: when I act out of fear, I end up regretting it.
Then there's the fact that by agreeing with his wish you would essentially be lying. I read an essay on NH a couple of months back about an entrepreneur that had a golden rule: never lie! His reason for adopting this rule was that by lying you are telling your brain that things are different than they are in reality and so your brain starts operating with false assumptions and soon enough your thought patterns adapt to the lies and you disconnect from reality in various ways. After the disconnect occurs your brain cannot offer you solutions to the problems you face in reality because it has accepted the fake reality you've presented to it (the one created by the lies). That's it in a gist. Here's the link.
Best of luck!
If you need the money now, you can say YES but eventually you will have to either replace this guy or look for projects yourself.
It sounds like he's getting paid by the client first and then he'll pay you? If this has been the arrangement in the past and he paid as agreed, maybe. But if this is a bigger project, as the client wants to visit, you should hammer an agreement to get paid promptly in stages. You don't want this risk of him simply running off with a big payday.
Sadly, the intermediary's request shows his true colors. Suggest you make it a top priority to find a new Strategic Partner/Rain Maker/Business Development executive to represent your team. Frankly, this could be a great opportunity to up your game. Adios Intermediary!
You are his partner.
This guy is going to lie to his client and wants you to lie too, but you feel like you can trust him (to provide you with more work).
Writing the book was a huge experience for me thanks to the inspiring stories that these entrepreneurs told me. You can find it on Amazon here: http://www.amazon.com/How-Did-entrepreneurs-struggles-experi...
1) Hatching Twitter2) The Everything Store (Amazon Story)3) Mindset: The New Psychology of Success --This one was particularly interesting when thinking about employees and recruiting and what to look for in people that you are working with. After the author introduces the concept it gets a little dry for a chapter or two, but then really interesting after that.4) The Hard Thing About Hard Things - this one was inspiring from a management/CEO perspective. When thinking about building a company that people enjoy working for (and all the tough stuff that comes with it) this is a great read.