I wouldn't want you to change, just to find your place in the world and satisfaction in being naturally you. Its like you have pockets full of keys and really good at finding new keys just no locks to use them with. There are other people who have the opposite problem and have locks they obsess over but find looking for keys exhausting, frustrating and confusing. You can be a force multiplier for them.
One idea, if you wrote a blog about each new thing you try, you accidentally create something "you stick with" because its about all the things you are not sticking with :) When your attention moves on, its not a failure any more because each article is a success. Documenting what you are doing might also let you spot some patterns that take you to the next level.
I wonder if you might find teaching \ training a rewarding occupation. Keeping up with continually moving tech and having a breadth of knowledge might make you excellent at that.
Do you procrastinate a lot?
Do you have a hard time transitioning? Are you late for things because you a) can't accurately estimate time and b) can't pull yourself away from the thing you're doing at that moment even though you know you're going to be late if you don't?
Do you have a very unstructured sleep schedule?
Do you have high impulsivity? Spending (sounds like it)? Speeding? Substance abuse - including alcohol?
Did you breeze through HS with decent grades without trying but then suddenly find college and its unstructured environment and lack of supervision much harder and hard for you to succeed in?
If you answer yes to many of those questions, then you may want to talk to a psychiatrist about the potential for you being ADHD.
I was very much the same way and was diagnosed at age 29. Best thing to happen to me. I've managed to turn my career and my personal life around.
Everything you describe sounds like the impulsive behavior of ADHD to me, but I am not a medical professional and I am not trying to diagnose you. You just sound an awful lot like I once did.
Best of luck..
Is it possible you are just abandoning ship on any project as soon as it gets hard? The first few stages of any tech - googling, researching, following tutorials - is pretty easy. Shorter projects are easier than longer projects.
When you read textbooks, do you actually do the exercises, or do you just skim? There's an entire second part of learning that involves thrashing and struggling against your own limitations as soon as the tutorials run out, and that's where the real learning is. The trick to that is to accept that it's supposed to be hard and you're supposed to feel helpless and dumb when it happens. The successful ones are the ones that keep trying anyway in spite of their own feelings of stupidity.
Anyway, ignore this comment if it doesn't apply, but your question can be read in a variety of different ways, and this one interpretation is just if you haven't toughened up and learned some tenacity.
There are probably a number of causes, but coffee may be one of them. Don't be radical, but if you're having too much coffee, I'd suggest cutting down to just one coffee in the morning. It will take a bit of effort but may help you concentrate.
Then I suggest you try to focus on finishing things as the main goal. You have to get rid of the addiction to the rush of novelty, but you can get addicted to the rush of publishing, with obviously positive results. In order to do this, lower the bar enormously. Take only TINY projects: writing a short article or even a tweet. Writing a tiny piece of software that does something. Cleaning up one corner of your disk. It is key that you accept average or even poor quality, that shouldn't be a consideration. And it is very, very helpful that you publish the result: post the essay on Twitter, Facebook, or a blog. Upload the code to github and share it. Obviously, cleaning up your disk drive isn't so amenable to be published, so maybe you want to write a line in an "achieved.txt" file.
Make sure we are talking really small projects here, and that we are not expecting anything from them but completing them. They will be small and mediocre. No problem at all! You can't solve everything at the same time. Make things small enough that their scope fall under your current reach, which you said is tiny - so make tiny thing! Err on the side of caution. You want to make sure you complete them. Half-an-hour projects are perfectly fine here!!
Do this for a week and recap.
PROS:1. Your energy level would match the students2. You could make sure the curriculum stays up to date, and every few years transition some large parts of the curriculum to a new language/framework.3. You have tons of experience to draw for the many left-field questions you would get4. The consistent new influx of students might feed that need you have for novelty
CONS:1. Not sure if you could teach each session knowing 80-90% is the same content as the last, but you're just changing 10-20% for this batch.2. Could you handle answering some of the same newbie questions every 3 months?3. They would, like most jobs, want you to stick around, but this isn't a total CON, they are likely more amenable to you leaving than almost any corporate gig.
So maybe it's something to consider!
I do think you might need some more help in managing this, but in the meantime, you can always find work that fits what some part of you needs right now.
I realized embarrassingly recently that I am a mental coward---if I don't like the implications of something, I just don't think about it. This is surprisingly non-disabling in a classroom setting, especially if you enjoy learning. It is a no-good for homework, though. I was everyone's favorite student---and failing.
My fear of unpleasant mental work ( http://paulgraham.com/schlep.html) led to an inexperience with mental work, making the fear worse.
When I untangled all this, the solution manifested itself in a few different pieces:
1. I gave up on the entitlement of always being in a flow state. This was scary, and my faith helped.
2. I started my days by planning them. I am actually not very good at this, and often I just write "coding" for a significant portion of the day, but the biggest benefit here is that I force myself to think about whatever it is I don't want to think about.
3. At the end of the day, I write down what I did that day. This forces me to confront myself about whether I'm planning badly or not.
The long-term passion and commitment come after some level of success, not before.
Steve Jobs didn't dream of dedicating his life to Personal Computing. It was his early successes that fed into his self-image and a feeling that it was what he was meant to do.
Maybe you need to find the right project.
Turn your weakness into a strength by publicly launching a new project every week. A new mobile app, web site, screencast, open source project, whatever. They don't have to be good, just a bit useful. Make things that you want and try to give them away and/or sell them to other people.
There are a lot of ways to make a living as a skilled programmer. Most people have trouble finding the right kind of project, and that's mostly because they don't iterate quickly enough.
Start a project, commit to the technologies beforehand, and deviate under no circumstances.
Facebook was built with PHP. AdWords was built with MySQL. Instagram was built with Django. GitHub was built with Rails. Stack Overflow was built with Microsoft technologies.
It seems there are few instances where a "boring" tech stack prevents the product from being built. If the idea is good enough, you'll make it work with what's on hand.
If you can commit to a stack, yet still can't finish a project, you may have to face some uncomfortable possibilities: that your ideas are no good, or that you're simply not a very good programmer.
Attention span is a requirement for being a decent programmer.
The hunter seeks new challenges, is less risk adverse, needs to be good at responding to the unknown and seeks the thrill of the pursuit and catch.
The farmer is more risk adverse and has the patience and diligence to gain satisfaction from seeing plans develop, mature and deliver results.
For me, while a definition of ADHD delivered by someone trained in identifying personality traits might be useful in developing a perspective on the strengths and weakness of one's personality, one might choose a more 'active' approach and look at the techniques that can help mitigate the most destructive aspects of the 'condition'.
Everyone is unique, we are somewhere on a bell curve and I don't believe that classification is particularly helpful, knowing one's self is not always any help in changing the status quo.
In terms of advice, I've never met anyone who has come to any harm from seeking talking therapy, I loved CBT and met a very nice councillor with a 'holistic' approach, trained in many diverse disciplines and with a very rounded and realistic angle, baby steps towards things you want to change.
Good Luck :)
I spent a long while, and still do, thinking about what am I heading towards. I know a lot of people don't know this and there is no way I will ever know all the details to make a decision, but I prefer the 'fail to plan, plan to fail' montra. Thus I plan, but am willing to scrap my planes in the wink of an eye, contingent on new infromation.
This is what I did and maybe you'll find something helpful in this method. Find what makes you tick. Make a list of things you enjoy doing. Try to be specific as you can. (You like novelty. Okay then maybe something like 'I like to learn a new trade skill (wood carving, stained glass, etc.) every 6 months.') Try to begin to boil it down to a long list. Keep adding things to the list, and take a break from the list every now and again (just to bring a fresh pair of eyes to it). If an idea seems broad, try to break it down (when I did/do this, I try to be able to tell someone the idea and they would be able to go out and do it exactly how it is in my head).
Then next to the list make columns like 'Financially sound ideas' (buying 32 Raspberry PIs to make a large cluster computer is not as financailly sound as Learning how apache2 works), 'Speed of doing' (you can learn how to write C at a basic level in an afternoon, but learning how to weld may take you longer), 'Practical for you to do' (if you weigh 400lbs and wanting to go backpacking through the Rockies is not as practical as learning how to write better on a whiteboard), 'It would bring me immediate gratitude', 'it would bring me long term gratitude', etc.
After you make a large list rank each column with 1-5 or some other ranking system (I liked the 1-5 because I could say I really hate, sort of hate, neutral, like, love an idea). Then you can hopefully start to see things that rank high in each category you made. (e.x. I really want to take a trip around South America (drive for two weeks or so through the Andes). It isn't practicle, it isn't quick to do, it isn't finacially sound, but it would be one hell of a memory. It is something I want to strive towards and go one day.)
You cannot "cure" what you find motivating. Just learn to live with it and perhaps force yourself to take longer "tours of duty" in jobs. Consecutive jobs held less than 1 year is universally considered a red flag by employers, as is getting fired. Engagements lasting 2 years in fast-paced industries are generally OK. If you're good at what you do you can probably control your urge to quit for a bit longer and do enough to not get fired. 2 years is not a long time and if you're able to do other things besides work, it can be a great advantage to have a job while exploring new things.
Another thing to consider is your life outside of work and your relationships with family or a significant other. If you're defining yourself strictly through work and ignoring the role you play in the lives of others, you're going experience some profound disappointments. In other words, perhaps your career decisions aren't really the root cause of your turmoil-- perhaps it is something far more personal? In that case nothing you do related to work will resolve your issues. YMMV-- just a thought to consider.
Our product (https://grabaperch.com) is a PHP and MySQL CMS. A self-hosted PHP and MySQL CMS. That means that we are not only PHP, but we have to support really old PHP, we support right back to PHP5.3 as that is the reality of the terrible shared hosting people use. Then in the UI we have to support the browsers that our customer's clients use. So we can't use all the latest front-end techniques.
So it's very easy to get bored and not learn anything new.
To counteract that my personal projects tend to be about really new stuff, for example I've spent a lot of time writing and talking about an emerging CSS spec that interests me. I tend to implement new and interesting things in our own stack too where we don't have the constraints that the product does.
So my best advice would be to see if you can channel your novelty seeking into places outside of work, and accept that work sometimes involves having to stick at something that is boring. Sad but true!
One could question if you really "learn" those new things, instead of merely skimming over them, since you don't seem to stay with them long enough to really get into the details.
Maybe what you're afraid is really learning? Which involves comitting to a stack, and also getting to the parts where a project approaches being finished, which is where the real and important issues emerge.
I know this is HN, but you haven't really mentioned anything about novelty outside software. Now, I will try to not make assumptions, but is it perhaps that you are only seeking novelty in a very constrained way, which makes you feel uneasy about your choices?
What type of food do you eat? What hobbies do you pursue? Maybe you have a very monotonous life (or at least you think you have it) and try to compensate in your career with novelty.
If I were in your position, I would first write down when and where I experience these 'novelty rushes'. The key here is not looking at these notes after you write them for at least a couple of weeks. After a couple of weeks doing this, look at what you wrote and see if it maybe has to do with other factors in your life (maybe you rush to try something new after an argument with your wife, when you don't drink your coffee in the morning or when you don't go running for 1 or 2 days)
Perhaps it has nothing to do with your life outside this area, but maybe you just like reading documentation. At any rate, writing down what you are doing when you get these 'novelty rushes' would help you identify the problem. Hopefully.
I recently had an awesome remote front end gig, yet this crazy outlandish opportunity knocked and I tried to ignore it, but they kept knocking (reality TV show for startups), so I gave up my job for it. I didnt make it that far in the competition, so now I am jobless .. late 30s .. similar debt .. dont own my own home .... no family and g/f is tired of my lifestyle/gave up on me.
Overall you are not alone .. this stuff for those who struggle with business guys/girls (im an inventor), don't have rich relatives or friends (investors to help you have a long runway to figure your road to success) isn't easy. Yet, we continue to do it ... it is an addiction, yet again Im too old now to drop everything(as I just did).
Also, there are so many of us in the industry who jump from one dev job to another for various reasons. Again, you are not alone ... we all have the desire to leave our mark on this earth and or just do what we love to do.. create awesome stuff on the web! Ironically my stuff helps me get jobs and then as you can see above distracts me from keeping many great steady jobs(but I AM DONE unless those who knock offer me loads of money & or a solid job doing what I love to do; invent).
I have some of the same tendencies, and infosec has given me all the entertainment I can handle and then some.
(There are other fields adjacent to software engineering which you might prefer as well---consulting, operations.)
I used to feel this way as well, but at some point things changed for me and I began to care deeply about the impact of a technology far more than what components it was assembled with. The obsessive, myopic phase is good for awhile because it gives you the motivation to build useful skills when doing so is hard work, though it does become a burden eventually for the reasons you list.
Others have recommended speaking with a therapist or counsellor, and I agree with that advice; you may be surprised at how deeply-held attitudes or patterns of thought can hold you back.
Finally, I can tell you what changed my goals, though this is obviously anecdotal and not treatment advice. I joined a big tech company, which gave me the ability to work on projects with a ton of reach. I didn't realize how tired I was of working on little-used web apps and experimental stuff that never saw the light of day until experiencing the contrast.
My story and maybe something for you to explore. I never held a job longer than 24 months when I was younger. Not being able to figure out a career direction and trying to get some direction in 2000 I sought testing at a great organization called Johnson O'Connor Research Foundation. They do aptitude testing and have been for 70+ years. Lots of data and studies on job satisfaction, aptitudes (which are different from both interests and skills), and success. Check out their web site they have some great info.
I tested high aptitude (80 - 99th percentile I think) on about 1/2 of the 19 or 20 aptitudes they've identified in their research. About 10% of the population tests this way. Most people have 3 or 4 max. The problem is if the aptitudes don't get used they agitate. Deeply. Like having a team of 20 sled dogs all fighting to run and no sled to pull or direction to go.
So I have learned I must use them or suffer the consequences. For example, Argentine Tango exercises my musical and social aspects. Engineering aptitudes, inductive reasoning, rapid idea generation, etc... all need expression. Some more so than others. Ideaphoria is rapid idea generation, handy in marketing or teaching, and a real pain if it is suppressed.
Commonly people with many aptitudes have a lot of difficulty with careers. Some use seasonal work or multiple part-time jobs or many different activities in one job to deal with what can often be conflicting drives.
Whether or not you are in this situation I don't know. What I did learn that may be of help was that I needed to respect the cards I was dealt in life. Gifts or burdens depended on how I looked at things. It's okay to have multiple projects and very diverse abilities and interests. Some may get abandoned quickly while others stick around.
Sharing seems to help. Get a blog up and start writing about all your projects. The ones that work and the ones that don't! For some reason sharing project results seems to help regardless of how they turn out. For example, I just had a surprising and inspiring response from HN readers on a blog post I wrote in November. I didn't realize other people would find what I was doing interesting enough to discuss!
I'm going to be 50 this summer and finally feel like I'm getting a handle on things. Keep at it. I hope some of this was useful. Get the help you need as you find the resources. Take care of your health, physical and emotional,and honor your gifts.
You love learning new stuff, but get bored quickly. Seize the enthusiasm you have for a new technology while you've got it, and make the most of it. Create books, online courses (e.g. Udemy), and blog about what you're learning. Build up experience and a reputation as someone who can turn lots of new and confusing technologies into stuff that helps other people learn.
If you already have, or can develop, the skills necessary to write and present well, after 2-3 years you could have a pretty impressive portfolio of material. If you can successfully monetise that, you've got yourself a career that fits your working style.
I recommend checking out the book "Authority" by Nathan Barry: http://nathanbarry.com/authority/
This will help in 2 ways:1) Slowly bring in cash which will tackle your $50k debt in definite time period. Remember "compounding" is the biggest weapon!2) The client's project will be short self contained tasks which will bind you in a timeframe to complete stuff. This is very important if you want to grow the focus and tenacity that you lack right now.
After a couple of months or a year, you will notice substantial benefits. The big debt will have come down a lot + you would have learnt to execute on ideas.
Now you will finally be ready to execute on your own stuff and make it big hopefully.
(Advice rendered from personal experiences!)
I've found two things that seem to help:
1. Start a startup. I started Fogbeam at least in part because it gives me an outlet to pursue things that are interesting to me, and a place to work on really cool new cutting edge stuff, even if my day-job doesn't. Back at my last "boring enterprise software development" job, I found that coming home and working on Fogbeam stuff helped keep me sane. (Note: in my scenario the startup is just a side project, but if you have savings or feel like raising money, I suppose you could just jump into it full time. YMMV)
2. Become a consultant. I started consulting for Mammoth Data back in 2012, and I've found that this consulting lifestyle is quite a bit more interesting than the typical "sit at the same desk, working on the same product, with the same people" routine. I'm constantly working on new and different things... every project is different, and since we focus on "Big Data", analytics, BI, etc., there's a non-stop stream of new technologies being invented / released that we have to try and keep up with. In the past year or two I've worked with Neo4J, Hadoop, Spark, Storm, Kafka, Knox, HBase, Phoenix, Couchbase, EMR, Google's Cloud stuff, Impala, Kinesis, Pentaho, and probably some other stuff I'm forgetting. The downside, of course, is the need to travel a lot at times (which is another of those "good and bad" things) and the feeling you get sometimes that you're drowning in all this new stuff. Example: In the past month or two, 3 different major companies have released distributed Machine Learning platforms (Google, IBM and Microsoft). And every day or two there's some new Hadoop / Big Data related sub-project hitting the Apache Incubator. And as a consultant, I feel a need to be on top of all of that stuff.. which, unfortunately, it's pretty much impossible to be.
Another side-note: You may find that signing up for and taking lots of MOOC's on Coursera, Udacity, EdX, etc. may serve as an outlet for your neophilia, and might let you stay more focused at work. Just treat coming home and working on a cool new class on Machine Learning or Synthetic Biology or $WHATEVER as a reward for putting in a good day of hard, focused work at the day-job.
It sounds like you need to see a therapist. However I imagine that's difficult if you're in debt, so you probably need to first try to get a job and pay that off.
Honestly there's going to be parts of any job that you don't like. Unless you are filthy rich or have someone paying for you, you're going to have to do things even if they bore you sometimes. The best you can do is try to do them efficiently so you can spend more time learning.
Also: have you considered contract or consulting work? If you have the freedom to travel around for work, it can be more dynamic and rewarding than your current pattern.
You can look for research jobs or freelance, where you can try lots of things quickly.
Alternatively, find a business partner or team that complements your skills/interests.
Also, you might want to consider switching to front end software development if you haven't already. There's always a new framework or library to learn in front end development and the development cycles are shorter.
There is this theory that says that for every IQ level you have to find an appropriate occupation. If the occupation does not require the whole your potential, you feel bored. If it requires higher abstract capacities than you have, you feel overwhelmed. So the thing is to find your level.
On my previous job I switched projects every 6 months. At the beginning they all sounded so exciting, I didn't know anything about things that I would have to do on them, so I was so eager to start them and learn all the stuff. But after 3-4 months they were so boring, I was struggling so much and then I always inevitably landed in my boss office telling him that I cannot stand it anymore and I have to switch the project otherwise I have to leave the company. But the thing is this subconscious urge to do something different is much stronger than rational thoughts. I can fight for some time with myself and then I give up.
But then I decided to switch the whole industry where I was working. And now I am incredibly happy with that switch. Now I am on the same project for 8 months and it is nowhere any sings that I wanna jump to the next thing. It is very different here and the tasks I have, they require really whole my mental capacities leaving no place for boredom.
So what I wanted to say is that IT project != IT project. You can use the same programming language to build something that is not that complex in its nature and it will make you bored, or you can use it to solve a very complex problem and then you don't need to satisfy your thirst with new technology because the project itself is already demanding whole your mental abstract capacities.
So what I would do in your place, is that I would try to find an industry which is not only using new shiny tools but also builds something extremely complex. You have to find a complexity level appropriate for your. So take something that you think you are not capable of (something with complex math or physics or whatever) and see whether you can deal with that.
It allows you to experiment with a wide range of topics while still providing useful contributions to the community.
Try working with a really growing startup you might like it. I was into infra for a while, the QA team, then development, then scaling dbs etc... Keep changing the role.
It is not just about the job. Try doing a course on coursera/edX. I do multiple courses across very different domains. I did Mathematics, biology, Electronics, then philosophy, Quantum computing etc. It gives you the element of "novelty" if the job doesnt interest you.
My first job in a R&D/Testing type role was working for an application service provider. I was responsible for evaluating new hardware from vendors before it would be released to our data centers. I had to not only test the hardware, but ensure the applications worked correctly, performance test, and document configurations. Each week was something new and I had great relationships with vendors such as Compaq, HP, Dell, and Microsoft that would constantly send demo hardware/software just so I could play. I left the job to take a position at Microsoft, and looking back regret it. I stayed at Microsoft for a little over a year for the same reason as you, I got bored. That is when I switched to just doing consulting.
But, if that doesn't work, I would look for positions in R&D for a company (that is the type of position where I traced my problem back to). Depending on the company/position you actually get paid to find and work with new "toys". Also, look at testing type positions.
There's always a new technique to master which can be brought upon in your work.
It is novel once you get there, but may take a while.
Quality construction, impeccable tailoring, expert craftsmanship these are the marks of quality.
There's novelty in the next feature around the corner, but there is beauty in something crafted.
Ecstatic pleasure can be obtained from crafting. Perhaps give it a go.
Also, if you haven't yet talked about this with a mental health professional, you probably should. It may take trying a few before you find someone who understands your particular problem.
You probably have a good idea how great software development should be done. But can you get 10 programmers to actually work like that and stay profitable, while they still don't resent you too much?
Take one of those jobs and spend your afternoons working on your own projects which can be implemented using whatever technology you want and can be as concrete as you want.
Look at your job as a necessary hell, but try to find the fun in it while at work and always remember that you have your fun projects back at home
I'd perhaps recommend doing an MBTI personality test (there's a bunch of them on the internet). This might help you to understand the mechanisms behind your behaviour and most importantly give you some hints how to make yourself useful.
I recommend to consider psychologist only as last resort.
DA website: http://www.debtorsanonymous.org/help/questions.htmThere is a meeting every day somewhere in the bay area. If you come to the friday night Laurel Height meeting you'll see me: http://www.ncdaweb.org/SF.html
"Component has bugs? Rewrite it in a new language!"
Sheesh ... what did you all think I was talking about?
There are research engineering jobs that also might be a good fit - you deal with a lot of different problems and get to satisfy your need to learn additionally from the researchers.
You need to stop saying that. You're not a software engineer.
Above all else, engineers should be obsessed with the proper functioning of a system, throughout all aspects - speed, security, robustness, etc. What tools are chosen are chosen only for the purposes of enhancing those goals. An true engineer senses these needs and works towards them uncompromisingly. To choose otherwise - for any reason - is to be a bad engineer, which it sounds like you are (sorry! Just being honest!)
The good news is that having an insatiable appetite for novelty has its place in this world. Could you work as an angel scout? Or a tech crunch (-style) writer?
Neither the dated, often fuzzy rules about practicing law nor lawyers' developed risk consciousness encourages this kind of "innovative" altruism. Instead, they create anxiety that keeps many community-minded attorneys from doing anything like this.
Bravo, Peter. Inspiring.
1. Can I set up a company with zero employees? Since I am on an H-1B, I am not allowed to work for this new company that I would create to house the service.
2. Is there any legal implications for me of doing this? Most of what I have read claim that any additional work is illegal, but I am not trying to get paid. I am just trying to make the service self sufficient so it's not a cost to me. I will not take a paycheck or salary, and will not remove revenue from the account of the Corp/LLC.
3. What other avenues would you recommend for doing something like this? I've heard from many other engineers in the field that they have similar ideas. They want to create things to benefit others, but are not willing to do so if it is a literal cost to them.
we can't lose our jobs to maintain the h1b status. will yc care that we are not working on the idea fulltime by the time of applying to yc? (will certainly quit the job if accepted to yc.)
what are the common attitudes of companies, like google, microsoft, apple, facebook, toward employee moonlighting?
USCIS recently approved my EB1 visa I-140 petition. Since I'm abroad my process will go thru the NVC and then consular processing. What kind of questions should I be prepared for at the consular interview? And about how much time should I have to wait for my green card?
I'd be grateful for a pointer on doing this or even just an FAQ as a starting point.
PS, thank you so much for the help so far.
How hard is it for a YC company to be able to sponsor visas? Have you had experience with this? And, as an applicant, is there something I could do to ease the process? Thank you.
1. Can I incorporate a company and look for funding under a B1/B2 Visa? 2. Once incorporated and funded, what type of Visa could I get for myself to work for my own company? 3. Would my two-year home-country presence requirement "212(e)" affect getting those visas? 4. If I'm unable to get any other Visa, could I be living in the US with a B1/B2 Visa working for the company I founded but without receiving a salary? How long could I stay? How about a TN or TD Visa?
Any lessons learned / things one should watch out for? (specifically around required evidence or RFEs that you got issued)
Thanks for your time! :)
What are the challenges in having co-founders in other countries and being able to grant them meaningful chunks of equity. Say example someone with 10% in Hungary and another with 10% in the Netherlands.
1-What's the easiest path for me to get a visa that will allow me to work and receive a salary here in the US?2-Can I do that through the company we just established?
I'm fully dedicated and focused on our company and growing as fast as we can and I need to come to a solution to my visa so I can continue working here with no problems.
Much appreciate your help Peter.
1/ How long does the process take for a company to be eligible to sponsor H1b visas. 2/ How much does it cost ?3/ Does the company need any minimum funding ? 4/ Does the company need to hire a certain number of American citizens/Green card holders before it can hire H1B visa holders ?
One of my good friends from China is gay and if he goes back home, he could actually be in danger.
I feel helpless and I want to do more.
2) If my B1/B2 visa allows me to stay in the US for 6 consecutive months; can I do programming, sales, fundraising, etc. for my Delaware C Corp in the US?
I am a citizen of Australia and I am going to switch on ZeroDB [http://www.zerodb.io/] fulltime pretty much now. For that, I have to leave my employer with whom I have an E3 visa (and I have a wife on E3D). Also I need to travel right after that.
Would there be any problem for us to enter back under Visa Waiver? Should we just fill an ESTA form online and have back out-of-US tickets on hand when we enter back? Any possible caveats here?
Another thing - my employer could technically terminate my employment very close to our date of re-entry (due to some corporate stuff). Would it cause problems in getting ESTA (when you are still technically on E3 visa but in a couple of days you're not)?
My questions are (a) what are the actual chances of success given the lottery system process for sponsoring an employee for the H1B visa, and (b) are we limited in the # of applications?
I have a question about E2 VISA's and what to do when you raise enough funding that you loose majority ownership?
The situation is company with 2 founders on E2 VISAs with majority ownership of a company, who'll most likely not be able to keep majority ownership after a series A.
Is there a good way to prepare for this and a good alternative strategy to not end up with a series A funded company where the founders can't stay in the country?
And do the E2's stop being valid once the founders loose majority ownership, or is it just impossible to renew them?
I've heard it's a bit hit and miss and if you don't have a good lawyer working on your side getting through might be tough. I'm not sure if it's a different story for H1B Visas though.
And more of a personal anecdote than a question, but during my own immigration process I've noticed that there appear to be mostly people who are either extremely over-prepared (have all the documents filled out in advance with additional papers/proofs/documents for every single step), or they are not prepared at all.My fondest memory was a man walking into the embassy asking to immigrate right now. No papers, documents, nothing. Just walked in, went to the clerk's window and asked to immigrate today. Even the clerk was a bit dumbfounded by the demand.
For instance, could the administration decide that anyone with a PhD, or even a master's degree, is eligible for a O-1 visa? If that's the case, why is the focus some much on statutory reform and not on the administration which could get results much more quickly?
Looking for information about US Visas on your own right now is made very hard by all the immigration lawyer's homepages. Those mostly seem to contain copied and low quality content. Often with conflicting or outdated information.
Given the obvious desire, by US companies, of hiring non-residents, it seems that there'd be a rather big collective interest in providing quality information.
I've been working at a startup for 2 years that sponsored my H1B. I've just accepted an offer at a big tech company, and they are transferring the H1B in the coming weeks. In the meantime, is it OK if I take 2-4 weeks off in between the two jobs without pay?
I have job offer to work in US, reliant on immigration.
I haven't completed my bachelor's degree, and my final exams are after the April 1st 2016 deadline. I do not have more than a year of professional experience. UK citizen.
Am I right that an H1B won't be applicable? Would any other visa types fit (Other than work abroad, then L1)?
- Is it ok to form a side company while on H1B?
- Is it ok for me to develop free or paid apps through my own side company (just me doing everything, without hiring anyone else)? If not, what do I need to do to not violate my status?
- What are the minimum criteria for an O visa and is that a viable solution if the side company is going really well?
Should I apply now for the extension or do I have to wait until further policies are put in place?
Thanks for taking two full hours to do this - I've learned a lot.
I am a US/Canadian dual citizen, my cofounder is Canadian. We're currently running our business as a Canadian corporation, but would like to set up shop in San Francisco full time over the next year or two, preferably incorporating in Delaware.
My cofounder has a BSc and has done some impressive things in her career, but the O-1 looks difficult from the outside. We're in a position to raise ~1M of funding from US investors over the next 6m - would that make her eligible for an E-2? The L-1 looks like a reasonable fallback if we can get nothing else setup over the next year, but we've been told not reincorporating as a Delaware corp will make fundraising more difficult.
Is there an obvious standout option here? Are there any that I'm missing?
This might also help, but I did not finish my degree because I was kicked out of college: https://news.ycombinator.com/item?id=5090007
I had a person at the US consulate remark on the fact that I was applying for a third E-3 visa with the comment "you can't keep doing this indefinitely", I didn't challenge him, but this by understanding was quite the opposite, that there was no limit on E-3 visas issues; can you provide any insight into this?
If I obtain a green card by marriage, but then split up before the 2 year deadline, does that have negative repercussions on your ability to get employment-related visas? I've already been dating my girlfriend for 2 years and we've been living together for most of that, so it's something that comes up as a reason to get married, but I'm not sure if it's a good idea.
I haven't launched my startup yet, and I reside in Canada. I've never been employed in the US.
I'd like my startup's HQ to be based in the US. What's the best way for a Canadian to set up base and launch in the US?
Edit: I may be wrong about this. IANAL.
For example, if you are not set on one career, and have pursued 3-4, and you get the O1 for one career (where you can show extraordinary proof), can you still do work in other areas? In other words, how broad can you define the O1 so that you could do almost any type of work as you could do with a greencard.
I have a very specific question I think will apply to many people here. Me and a buddy who is from another country are building a product. We will soon be done with the product and we are thinking about registering the company here in the USA just because it is very easy to get funding here. The company will be a registered in both of our names, (even though he is a foreign national, I am flat-out assuming this is possible). Eventually, if the company does well we would want to stand up an office here. At that point, what are his options to get to USA ?
I had a question about H1Bs. My F1 OPT expired Feb 2015 and I had a grace period of 180 days to apply for STEM extension. But in the meanwhile (April 2015), I heard that my H1B got picked in the lottery. So I googled it and read someplace that I wouldn't have to worry about the OPT STEM extension anymore, so I didn't go forward with my STEM extension application.
Is this something I have to be worried about going into my visa interview in my home country?
Is there any advise you can give for a current undergrad (for me personally citizen of NZ and UK if that matters) to improve the odds of being able to accept a job or PHD study in the US (on the visa side of things), both at application time and now til then (~2 years away).
However, it's a small field, and not one that attracts much press coverage. How does this balance out?
I run my own business. All online, mostly US customers, soon will be a Canadian corporation.
Also just wanted to say thanks for doing this.
How would you recommend an H1B holder go about transitioning to founding/working for their own startup?
The H1B process officially kicks off in April, so am interested to hear about types of contractual agreements that might allow employment from now for the next twelve months whilst processing is underway.
I'm a Canadian and I had an H-1B several years ago. I used about 2.5 years of it and left US in summer 2011 before using up the full 3 years.
Am I eligible to come back on H-1B without lottery by claiming the remainder time? I read something about this online saying that I can come back on H-1B before 6 years past the date I left US?
My wife and I are Canadians working in California on TN visas. I'm at a small startup that doesn't sponsor H1-B but I might start my own business in the future. Should I look switching to a larger company in order to get H1-B so I have the freedom start my company?
Thanks for doing this AMA.
I want to know how can a founder and a co-founder who are on F-1 and F-2 Visa respectively start a company. What are the requirements for the company to sponsor their own Visas at a later date if and when required? Do investors have a bias against investing in such companies.
And thank you for doing this!
I'm a student on F-1 visa. Am I allowed to form an LLC and sell products / offer services, while revenue from said products or services will be kept in the company bank account, without me pulling a salary?
Also at what stage he/she can change the job?
F-1 and OPT then H1-B? O-1? Making some money in Canada then starting a company and E-2?
Is it possible to do YC, if the founders are initially registered as 'tourists'?
and related: How long until you have to leave US if the L1 issuing entity is acquired (and disappears as an entity)?
2. If an E3 Holder would like to found a startup, how does one go about self sponsorship?
Is it possible to apply directly for a green card through employment while being on J1-Intern visa?How long do you think it takes to receive it if approved knowing I'm French?
Can you describe in practical terms how the requirements between an O1 and an EB1 differ? If I got my O1 recently, can I reuse the reference letters directly?
About a year and a half ago I mentioned Autopest in an HN thread titled "Ask HN: How to start earning $500/month in passive income in next 12-18 months?" Since then, it keeps getting featured in Reddit and Quora lists for "best growth hacking tools" and "best sales hacks," and I've also seen it popup on sites like Inc.com and LifeHacker.
I guess Autopest isn't technically passive in the sense that every few months I code a new feature or two based on user feedback, but I also go months without touching it, and more people just keep signing up.
P.S. Here's the original HN thread... some good links to other passive income projects as well: https://news.ycombinator.com/item?id=8246255
Sells a couple Kindle copies per week. In terms of actual income, it's negligible. The feedback has been unanimously positive, so my problem is to get it in the hands of as many people as I can. Therefore, if you want the epub/mobi files, just message me (see bio) and I'll be happy to send them :)
W3Counter is completely passive -- no new code or features in over a year, no customer support load, autoscaling frontend (EC2) and backend (Aurora). Improvely gets feature updates a few times a year and has some light e-mail support load.
I also added a single banner ad to each of my open source projects' documentation sites, and that's added ~$200/month via AdSense. Developers are surprisingly lucrative targets for advertisers I guess.
Netted me enough income to pay for the data center hosting and a few starbucks coffees per month for myself.
It's not much, but it essentially gives me a free dev area with a ton of computing power for me to roam free.
Total earnings: 7.35EUR in total from Google Ads
-Adsense/Lifestreetmedia on my Pirates FB app (Adsense: $29 this month. Lifestreetmedia: $47 this month) http://greenrobot.com/pirates
-Mopub, Inmobi and Facebook ads on my iOS and Android apps ($14 from Mopub this month)
Started it in September and started selling before the watches were made. They're still in production and will be finished soon.
Wouldn't maybe call it "passive income", but the sales keep coming through WOM. (http://gardannewatches.com)
I created it as an alternative to the many printing services that require a dedicated app. OttoPost doesn't require an app since it just searches for your new Instagram photos and prints automatically (that's configurable).
Not exactly world-changing, but definitely something hands-off at this point and better than nothing :)
It might be several hours to fix, retest and update documentation for even a small platform change, so just keeping up with platform changes can be significant effort if you work a full-time job, have children, other commitments etc.
The good news for me is that changes at work are affording me the opportunity to escape some process and re-open some of my side-projects again.
I've been working on an Appointment Reminder clone for a year now in my home country Austria. I will about break even in 2015, but will have an MRR of ~1500 in 2016, with low ongoing costs.
So I reckon that in 2016 I can have a pretty passive income (working 5-10hrs/week) of 2000+ per month. Not that I will work that little because I obviously still want to grow my income. And I also need to add that I've been earning considerably less in the past 3.5 years than I would have if I had stayed employed as a software engineer.
Oh, and then there's the Android app that makes about 15 per month ^^
Total income this year: about 5 Bitcoins http://ecogex.com/logos/
-regular websites (as in I don't use rss)-talk radio about 50% of the time I'm driving (music the rest of the time)-gmane with pan-occasional tv in public places (better for local stuff)-books (< 5% of my book choices are current events related)
If you choose the shotgun approach, as I did, Keep a spreadsheet, or something, to help organize all the information.
Always Customize your resume by using the words that they put on their job hire post. (This will get you past electronic screenings and non-technical HR people who just look for keywords). This is really annoying (writing your resume each time) but I felt it helped me.
I always researched the company the night before resumes and try to find a technical blog that a company may produce, or some niche thing that the company does. (Capital One and it's AutoNavigator is what I focused on when I was interviewing).
Lastly, I did embellish the truth a little in any of my stories. Not to the point of a lie (... sort of ...) but I made my past technical experience an enjoyable story to listen to. There was a quote I read in 'Iterating Grace', paraphrasing it: Great Stories are better than Great Facts. Don't lie in the facts, but like statistics, you can bend the truth and still let it be truth.
Another piece of advice is make sure you are confident when you walk in. Even for technical roles, confidence is key. Being able to talk and have the interviewer like the interviewee is one of the many keys I found to being successful.
If you don't mind lying, most companies will never check your GPA past the transcript you hand over (if you do that at all). So you want to embellish that 3.2 GPA to be a 3.5+ go ahead. Most companies never check. (Come to find out I didn't have the correct GPA on my resume when I changed semesters even though I had an updated Transcript I was sending out. No one ever bothered me about it). I did not ask the HR at my company this question as well and they did not confirm this fact.
I hope that helps you some :D
A big fact about the field is that a large number of companies aren't in a place where they can hire new graduates or junior programmers. I have a suspicion that most of the difference in number of responses is that your friends are simply hustling harder and sending out more applications than you are.
So far it's working, I'm way ahead of my target 7% month on month growth, so I'd recommend doing something similar - build a SaaS app that you can manage by yourself, and invest as much time as you can in learning marketing.
If you're interested I'm doing a completely transparent blog series about my progress - https://blog.bugmuncher.com/2015/10/22/from-side-project-to-...
- Create a product in a niche and focus on finding customers within that niche. For a goal of $3000/month, it is surely possible and not too crazy
- Don't just rely on yourself even though there are many 1 man success stories here on HN. I would say get at least 2-3 trusted helpers even if they are part time and slowly delegate the not so critical aspects to them while you still focus on the core. For example, if you a SAAS product, you could still do coding + customer support while you could delegate some of the other admin stuff including some customer support to someone else. This will give you leverage.
You'll come back to your desk feeling refreshed and ready to focus.
This practice becomes even better when just prior to returning to your desk you devise a plan of action for when you sit down. That way you won't be tempted to sit back down at your desk and check email or see what's new on YC.
Accountability.This can mean sharing with a colleague what you intend to complete at the start of your day, and then sharing what you actually completed at the close of the day. It can also mean finding a location where you feel the risk of your distractions being observed when you begin to indulge them (e.g. sit next to the CEO of your company; manage your work on a large, external monitor that's within your team's line of sight).
Sleep. The poorer my sleep habits, the easier it becomes to focus on and become excited by the wrong things. What's tricky is that you may actually feel more energized or alert when sleep-deprived, but this is perhaps due to the extra releases of dopamine that help fuel you through the day, a mechanism that was once useful in hunter-gatherer days when survival depended on persisting through fatigue to complete a successful hunt.
Nutrition.Breakfast, lunch, and dinner. I require all three if I wish to maintain consistent performance.
Start working on something small at first. Tweak a color or whatever to get started.
- install browser plugins that block certain sites for some time. e.g. leechblock on Firefox can block certain sites for X minutes every X minutes, similar to the tomato method
Maybe I feel I have exhausted the internet - social networks don't hold my attention any longer, digg/reddit sites just annoy me now because the user bases seem so immature.
I have a medical condition. So looking to my physical health has long played an important role in being able to focus. When I can't focus, it often means I am dehydrated, hungry, running a fever or something like that. I strongly suspect that when other people complain they just can't concentrate, it suggests they have some kind of minor health issue, such as an unrecognized allergy or poor sleep quality for some reason.
When I was in really poor health and had a corporate job, I took a break every hour on the hour to have a snack, a drink and a bathroom break and try to get myself pulled together enough to focus. I need less of that these days, but I still have days when an afternoon break and snack and drink and some caffeine can help get me going again when I am flagging.
We submitted a few patent applications during my master's research project, that the university eventually bailed out on due to the industrial partner pulling out.
The patent agents basically pulled a list of a few hundred (might have been a few thousand, there were many duplicates though) patents we had to go through and make sure they weren't prior art. We mainly used google patents. We reduced that list to less than 10 patents, which we then we through in detail with the agents, them explaining to us the subtleties of the law and patent specific language (words on patents don't always mean what you think they mean) and us explaining the technical aspects of our invention and how it's different.
Overall though, I came out of the whole process feeling like the utility of patents for the independent inventor is very limited. Not to mention the initial time and cost to apply for a patent, think about the eventual cost if you need to actually defend it in court, ie, make actual use of the patent. Is protecting your invention worth this?
Searching for patents online is fairly trivial, but time consuming. I'm assuming you're in the US (I'm not, but the value of most patents is that they are not yet patented in the US, so we did our patent search there). http://patft.uspto.gov/
As far as patentable, I can't really comment. I am extremely disappointed that the Amazon single click purchase was awarded as a patent as I don't believe it is non-obvious. I'm not too far off the same belief for my own patent, but a bunch of experts had looked at the problem before and didn't get to my solution. They thought my solution was elegant and decided to patent it. At the same time, we mostly patented because that is what the higher-ups like to measure. I can't imagine my patent every actually being used for monetary gain.
So, you don't want to be a patent troll, but you have an idea. Do a patent search, see if it is already patented, but more important, do a search to see if anybody has come up with a solution that is close to yours. If the concept is already in the public domain, or something close enough, than you can't patent it.
The big question is why do you want to patent it. You say you don't want to be a patent troll. Will you be building a business around this patent? Can it be used in your existing business? Do you have the ability to make your invention into a viable product?
What is your definition of a patent troll?
"Another thing inventors can do to reduce costs is to first start by filing a provisional patent application. A provisional patent application needs to disclose the invention completely as would a nonprovisional patent application, but the exact formalities are greatly reduced making it easier to prepare, meaning it costs less. We can attach documents to support the originally drafted provisional patent application, and we focus on getting as much as possible into the document. In my experience most inventors who pursue the provisional do so because they have made an interesting advance and want to protect what they can now while they continue to refine and work on the invention. Done in that way a provisional patent application makes all the sense in the world because it gives you protection with respect to what you have presently and lets you continue to work to improve the invention over 12 months before you need to file a nonprovisional patent application.
The cost for attorney time alone for a provisional patent application is typically at least $2,000. The filing fee is $130 for a small entity and drawings typically cost $100 to $125 per page, so a high quality provisional patent application for a mechanical or electrical device can typically be prepared and filed for $2,500 to $3,000. As with nonprovisional patent applications, the technology involved and the complexity of the invention do greatly affect the quoted price for a provisional patent application. For example, for computer related inventions and software the cost to prepare and file a provisional patent application is typically $6,000 plus the filing fee and drawing costs. The increased cost for a high quality provisional patent application that deals with software is due to the reality that so much more information is required in these applications. You really need to describe the complete architecture of the system and drill down to the algorithms, routines and sub-routines. See A Guide to Patenting Software, Building Better Software Patents and Patenting Business Methods and Software in the U.S. Of course, these are just ballpark estimates."
Some people just prepare their own provisional patent, without the help of an attorney, but you might not get the protection you want if you do this.
I think perception plays a big role. There are fairly large and high traffic apps built w/ Mithril, but when someone is taking a risk to learn a new thing (and there's a lot of that in js), of course something used by google or facebook feels "safer" to learn than something used by mashape, guild wars 2 or lichess. I've seen the "might no longer be supported later" fear being mentioned more than a few times, even though the reality is that it's not really a solo project anymore - it has almost a hundred contributors - and has a fairly sizeable ecosystem. There are even Mithril jobs out there.
Another somewhat ironic issue is that Mithril's main appeal is its lack of ceremony. It doesn't ask you to drink the revolutionary koolaid of "bi-directional data binding" or "immutable unidirectional data flow" or whatever other fanciness you can explain to others to make yourself look good. It's just a tool to get stuff done. And even though that's an important metric, it's not exactly newsworthy.
re: ES6: to clarify, you can use ES6 w/ Mithril. The issue in question has to do w/ trying to shoehorn ES6 classes to be components (which are normally plain objects in Mithril). Things like arrow functions actually make things cleaner in places where you'd otherwise use a .bind for example.
React was just as easy as Mithril. And for big projects, React brings in a better structure and performance. React ecosystem is full of amazing people, there is always something new that i want to learn. Flux, Redux, Relay, RN, the list just goes on.
Both options are costly and that's maybe one of the reasons.
1. The domain name could be different. It is a little longwinded and it does not convey the value of the service clearly. It places it in a SOS context, whereas you will be able appeal to a larger customer base if it were positioned as a Chef-on-tap service.
2. How do you throttle chatty customers? How do you rebate non-power-users?
3. $20 per month is on a high side (I can get A family plan of Google Music and Netflix for ~3$ more per month). I am not saying everything should be pegged to these services, but as a customer I think this way. May be charge per question?
4. How have you implemented the chat? Curious to learn.
All the best.
I recommend minimalist shoes, this will help your feet get stronger, stay away from anything that has cushion in it.
Lately, I got these: http://naturalfootgear.com/collections/mens-shoes/products/l... Can't recommend them enough.
Here's just one example: The software had an internal part number field, and 2 description fields. The guy in charge of part numbers and descriptions wanted 5 digit numbers and wanted the description to start at the top level and drill down.
Here's one description:
RESISTOR MRS25 100K
RESISTOR MRS25 1
The first thing you must do is learn and understand the system. It works for them, and anything you replace it with is likely to break things and to make life worse.
Most places will have payroll software. And so a bunch of manufacturing software is an add on or extension to that software - maybe some accounts stuff for handling invoicing, and then for handling buying materials and stock, and then for handling stock internally. But accountants (who create this software) don't understand how shop floors run, and so you end up with frustrating weirdness.
Before anything else, I would sit down with all the employees (together and separately) and hear from them what are the problems in the business and what they think should be the priority.
This will have 2 affects.
1. They will respect you for giving them a voice.2. You will get smarter by the minute on what the business needs.
After that, before anything else I would just set up systems in place, processes and systems are super important when you run a time and materials business.
Understanding the cost and getting the cost of goods and labor down would be my first priority. Processes will help with that since less time will be lost.
Systems I would put (in order of priority)
1. Orders and production2. CRM *customer service, customer relations, sales and more should be included to make sure you maximize your business.
Without more details it's hard to give more tips, but depending on the business type a website with online orders and online quotes can go a long way, for other types it's not that important.
Above all, good luck with your journey and your business. Take care of your employees, they will take care of you a lot more in return.
If there's a single tip I can give you is to treat your employees as equals, as you want yourself to be treated, they are your single most valuable asset.
You may find this semi interesting:
Then think how would you build business from scratch to deliver products that customers need.
Then come back and make adjustments into the existing operation that fits your vision.
SAAS, hacks, shmacks may (or may not) be part of the process to optimize the business.Nothing wrong in paper, excels, quickbooks and order forms per se. If business is a smooth machine in operation - be careful in making drastic changes.
I've been in situations where I've spent weeks or even months re-writing things because I read one more article about how some given approach is better than the one I was considering. Ultimately it doesn't matter enough to make a difference in the real world - your application will not be appreciably better because you used gulp instead of grunt or React + Redux instead of Backbone.
That doesn't mean that there isn't a difference between those things, or that some aren't better than others (I like React and would recommend it) but the choice of tooling is not your main problem. This is going to sound very dull, but your best bet is to make some simple choices, stick with them for a while, and see how far you get. Try to avoid questioning things for a while, even if that feels really unnatural.
I think there's a kind of tooling FOMO that afflicts developers, where we get worried that if only we were using a particular tool or technique then our jobs would be, say, an order of magnitude easier, more successful etc. This is hardly ever true, and if it is true then you will be unlikely to be able to identify the choice you need to make until you've spent a good while building version 1 of your application anyway.
It sucks, but it doesn't end. Every once in a while you're be in a nice place where you're using familiar tools and libraries and doing familiar work, but every new project and technology brings potential new demands to feed the machine.
You can have a long, happy and prosperous career working with a single stack that someone has made work on your OS of choice, but if you don't enjoy feeding the machine, there is a ceiling on your flexibility and problem solving ability.
Go simple. Pick a language. Start writing code. Stay focused. Only solve the problems that you need to solve, not any problems that you might maybe, perhaps, come across. Don't go shopping for a toolkit until you have tried building something yourself. Especially if you are young - remember that writing code to solve problems that someone else has already solved is not a lost cause; you are learning!
Remember, perfect is the enemy of good.
Today I think it's way too easy to get lost in the flood of of platforms/toolkits/frameworks. When I got started 20 years ago it was a lot simpler - crappier but simpler. :) You might or might not have what it takes to be a good developer - but I seriously see the risk of potentially good developers getting stuck before they learn how to navigate these new-fangled floods of ... stuff. It's like a tax on brain cycles to keep up with it all. If you have no discipline you will end up spending all of your cycles shopping toolkits rather than solving problems and learning how to actually program.
For this reason, projects run by a solo developer tend to use less tooling and process than team efforts; the friction introduced by each new step in the workflow is a major penalty. The solo developer can just opt to ignore all the cruft and use a cheap, lazy option, because there is no communication issue.
This also presents a bit of a dilemma if your goal is to learn a workflow in order to get hired on a team using that workflow, because you will feel like you are making nothing interesting or noteworthy. Your best option is to temporarily change your mindset from "engineer building software" to "writer building documentation".
The person documenting has to play detective and ask questions constantly. It takes them four times as long to do anything because they have to write down the steps and make it digestible. But each time they make progress and write down those steps, they set down a little roadway for people to drive over in the future. They also gain more credibility as an expert in the process.
Personally, I would suggest, to go at it one at a time. The reason being, these "things" (build tools, frameworks, etc) are there to solve specific problems. If you don't have that problem, then you don't need to understand it, yet.
Pick a project and start building, you might find that you need one specific tool, which then you would use that specific tool or you might find yourself having trouble with a certain design then you use a framework that fits your model. This resonates well with @johansch comment. Over time, you will notice a pattern in your knowledge where jumping from one framework to the other is not that difficult because you are jumping from a higher board knowing the frameworks you already used, this applies generally.
Be depressed but don't give up, the joy comes when suddenly it all just clicks.
Just don't use them for this project. Just build the project using what you know now.
You can pick up that new tooling again at a later stage when you aren't so pressured to deliver something.
99% of being a successful programmer is coming back tomorrow, and getting a tiny bit more done, and learning a tiny bit more.
Relevant Quotes (Sometimes these help me push through)
> I have not failed. I've just found 10,000 ways that won't work. ~~ Thomas A. Edison
> A failure is not always a mistake, it may simply be the best one can do under the circumstances. The real mistake is to stop trying. ~~ B. F. Skinner
Based on your question and comments, I'd actually suggest you reach out to your friends in the community who know more about the tools that you think you need. They might be able and willing to get you up and running with those tools, so that you can move forward.
For example, I'm fairly junior, but comfortable with testing once there's a framework in place. I've been through this enough that I've reached the point where I can get a basic Jasmine or Mocha framework up and running on my own, but recently ran into a problem where I needed more than a basic set-up. I mentioned it to a coworker and he said I needed Webpack. When I expressed concern about spending time learning and setting up Webpack, instead of working on my application code, he volunteered to get Webpack in place. As I learn more about Webpack, the process of setting it up for my next app should be less intimidating.
I love this meme - http://i.imgur.com/5mAUQj2.jpg - If you're a programmer, you've certainly experienced both states. While I think I run about a 1:1000 ratio, when I've spent a significant amount of time on the right, I try to remember the sensation of being on the left and I know that each mistake is one less mistake I can make and therefore moving me toward the left.
And one last, very relevant quote...
> Do not fear mistakes. You will know failure. Continue to reach out. ~~ Benjamin Franklin
[edited for formatting]
Ultimately the times you are learning/improving the most are when you are facing many new challenges.
If you are anything like me, you may find trying to find ways to enjoy this time more helpful than trying to bypass or speedup this phase.
EDIT: This is important, so I want to say it as clearly as possible. FUCK. ES. 2015. ES5 is actually pretty good. Learn prototypical inheritance, or just don't use OO. People have built real apps in ES5, you'll live. It might be hard at times, and you might have trouble learning, but the important thing is that you'll be writing code, not fixing your toolkit.
Well, it got built and it's been successful for its built purpose. The code isn't exactly pretty but it's fast and not buggy at all.
I spent the last year learning object oriented programming, software architecture, ui toolkits. I'm just starting with react, typescript, node, aws for my new app.
Because I built my first app 'the hard way' I now appreciate the value of these toolkits and frameworks and think they're worth taking the time to learn, but only if they simplify my process and not complicate it.
Keep working you'll get there and it's worth it!
I can guarantee it's going to restore your faith because you will spend most of your time writing your features and ideas, instead of glue work. Nobody likes glue work.
Where do I start? Right here: https://www.udemy.com/learn-meteorjs-by-building-10-real-wor... - you build ten real world apps, not some shitty task list garbage. I promise you won't regret it, it's -fun-. Like that first time you used Rails way back when? That kind of fun!
So it's not just you. I would never set any of this up from scratch for a personal project. And I don't expect you'd need to, ever - established companies will have an existing pipeline (with its own problems you'd never learn externally), and new ones can just use one of the various boilerplate project templates.
Don't give up and keep learning!
There is a proliferation of [boilerplate projects](https://github.com/xgrommx/awesome-redux#boilerplate) out there at the moment but they are quite heavy and all do things a little differently.
I think what is lacking and will emerge eventually is some glue to fill the gaps that everyone is identifying. I think it will be a few small core libraries with some conventions about project structure, toolchain, and modularity.
Use less-shiny stuff. Ditch the frameworks etc. Do the simplest thing.
I'd say that what needs to change is your mentality.
There's a lot of things you can do to change how you're thinking. It all comes down to understanding the essence of why you're feeling this particular way.
What are you trying to achieve?
Programming is much about learning and it never gets easy when you need to pick something new. I suggest you find a mentor if you don't like experimenting alone, somebody who can give you some guidance.
After you learn something, it gets easier, and very rewarding.
On the subject of "not having what it takes", I disagree. Find a friend who draws, sings, plays an instrument or whatever, and ask them to tell you how much effort they had to put to learn their craft.
"Computers" are probably a lot easier, at least in comparison, since you have to use them anyways.
But the headaches are surprisingly minor and barely figure in most of the time. If/when these headaches get bigger (I suspect this will start in earnest when more front-end developers join the project), then I'll take another look at integrating a module loader, or a form generator, or an automagic React router, or a super-cool atomic state system like Redux. In case you're wondering the application works amazingly well and most of the time implementing even far-out crazy features has been easy and fun.
Finally, don't get too worried about making the "wrong" choices, and don't bail out for something newer when you hit your first roadblock. Most of the options you have available these days work great! The things we expect them to do are totally incredible, that's the only reason people are still proposing alternatives all the time.
If you don't need to support older browsers, ES2015 is pretty easy to include. Otherwise if you need to use examples based on an ES2015+ version, just paste the code into the Babel REPL: https://babeljs.io/repl/
You can get any bundled npm module here: https://wzrd.in/
Solve some of those puzzles once in a while, no tooling necessary. Or if they are too easy, go to project Euler.
I also feel the same frustration of JS tooling. It's just not a lot of fun to go through so many steps before you can actually start coding. I hope it gets better once the basic setup works.
It'll save you the headache if configuring and setting up everything, and with a feature complete framework like Rails, you'll hit the ground running and be cranking out features in no time.
Unfortunately, it's also nowhere near as active - possibly because it works on invites and its often hard to find someone who will invite others.
Having said that, if anyone wants an invite, please reply here (or see my profile to email me, please include your HN username if you do that) and I'll shoot you an invite.
High signal-to-noise ratio.
A fair number of thought-provoking posts from a lot of different angles.
I could find the same stories elsewhere with no (or worse) discussion.
POSIX enough that tools and environments work pretty well without a mountain of hacks and workarounds (e.g. Cygwin).
Mac enough that the user experience is coherent and consistent across the overwhelming majority of applications. (e.g. drag n drop, key bindings, media interop, etc.)
Popular enough to have native MS Office in orgs where that's still a hard requirement.
I tried to force myself to go full Linux by swapping out my Macbook Air for an X1 Carbon Gen 3 running KDE Plasma 5. The environment was nice and customizable and I was able to get pretty comfortable with it, but the instant I wasn't using a qt5 & KDE 5 frameworks application, the user experience fell apart. Couldn't set my key bindings the way I like in GTK apps because the GTK/GNOME teams apparently gave up entirely on accels files and key-themes. Media interop was pretty much non-existent, and there were lots of annoying little bugs (e.g. resizing a window would drop its focus leaving in a context where there was no active window and I'd have to click back in it.)
I still use Kubuntu 15.10 on a 12-core Dell T5500 w/ 48GB RAM for running larger distributed systems simulations/tests, and it seems about a hundred times more usable than the Windows 7 machine my job originally provided, but when I want to move fluidly between development, making arch diagrams, writing docs, or creating conference decks I can't escape how much better the complete experience is on my Macbook.
Also, LibreOffice Impress somehow managed to make a UX more bewildering, broken, and obtuse than PowerPoint, which I'd previously thought to be impossible. Viva la Keynote!
The linux driver issues were much more severe when running linux on a laptop (power management, CPU C-states, etc). I need dependable wifi, sound, video and other driver updates... I got absolutely tired of wondering wondering if X, network, and/or sound was going to work after each and every minor update.
Apple was/is the only vendor shipping a "working" system in laptop form for a reasonable price.
- Trackpad and MagicMouse are generally well above the mainstream.
- Good iOS interoperability.
- Excellent screen, battery life, weight and finish.
- Most unix dev tools/apps run well. Homebrew.
- Aesthetics. Yes, it counts.
There is no argument about the fact that OS X / Windows are much easier to use by people who start their jurney. However at some point cons are simply overtaking all the pros.
Although I disagree with some other commenters that Linux is hard to use on laptops (linux went through long way - "normal" people can enjoy it just like pros). I also do not agree comments about sharp look or battery life - I personally use Samsung Ativ 9 and find it way way more aesthetic than mac book. No problem setting up Arch on it. No waste of time to make things working.
And none of my devs is using OS X. They went through long way themselves and probably know better than me.My observation is that Macs are much more popular in US so since I'm based in London my view may be biased.
With Linux, there isn't a consensus laptop model that everyone will request. One ends up with a lot of one off business cases, vendors, service contracts, etc.
With Mac, you have a consistent upgrade cycle, one service contact, and no fragmentation of OS distribution usage, etc.
TLDR;It's easier to say "I want a macbook pro w/ cinema display..." and "we hired another developer, please re-order a mac dev setup", than any similar Linux setup.
And it's reasonably enough unix-y (and modern if you use macports to install current versions of core tools) to allow daily work on OS X instead of Linux.
Food for thought.
So if you want to test on OS X (including Safari) then you need at least one Mac.
Sharing a single Mac for testing could be enough, but given a team of more than a few devs and it may become a bottleneck.
You can run Windows and Linux VMs on a Mac - without breaching any EULAs.
For web devs who care about Safari, Macs become almost mandatory.
Note, I do not own or develop on a Mac. I primarily work on a desktop simulation software written in Java. I found the Mac love professed by other devs I know somewhat bewildering for a long time. I was only when I dabbled in some web development with a Rails app that I realised how much pain came from browser differences across platforms. Now the strong preference for Macs made more sense.
I switched to Linux(redhat and then ubuntu) for the next 8 years and loved vim and programming tools that linux had to offer. The resource utilization was never a blocker. The frustrating part was wireless drivers and machine hanging up because of them.
I recently shifted to OSX and installed iTerm/vim and all that. There have been no issues with wireless hardware and resource utilization. However, setting up production-like environment, which runs on Linux is a huge pain. Running a dual-boot ubuntu is also not as seamless and there are quite a few display driver issues. My take:
- If you have just started programming, start with Linux (if you haven't fought enough to compile drivers for your machine, you are one bit less of a real programmer)
- If you are doing a lot on the server side which largely is Linux driven, then you better use Linux to understand systems and deployment.
- If you are using eclipse, then you better shift to OSX because no other hardware-os combo at that price can let you code in peace.
Webcam drivers also broke when apple switched from a USB Webcam implementation to pci or something.
Power consumption on osx is probably a half or third of 14.04 LTS.
I founded a company and need MS Office (unfortuantely), Fusion 360 for CAD work (FreeCAD didn't quite cut it) and once things got rolling the number of Skype calls picked up.
I still dual boot and prefer Ubuntu, but now I am 90+% in osx.
Before this computer and startup, I had been using Ubuntu for 6 years and loved it. Looking forward to going back one day, but for a while, I'm going to be on osx.
*I've seen poor reviews of System76s stuff.
My Mac devs make work around in our code (geared towards Debian servers) so it runs in MAMP. Linux all the way through is a win.
As far as having to edit config files to make things work: I think it's good to know what's under the hood.
We get recent CS grads who know very little about how computers work. Linux might force you to learn the fundamentals but, I argue that is a good thing.
And, my Gentoo desktop (primary dev box) has been happy for a decade - through upgrades to hardware and software. Cheap & stable. What's not to love?
While Linux Distros like Ubuntu make it really easy to set up a developer system (with localhost web, languages and database) it is even easier on OSX via MAMP: install MAMP, configure with a GUI, ready to roll.. Linux you might be tweaking some config files to get the optimal setup.
On Linux you are partially a dev-op not only working on your code but also learning and tweaking your OS, services, etc. for one reason or another.
Another factor is there are some shinier tools on Macs, (i.e. the Adobe lineup, and a easily installed Sublime Editor) And many that went to learning institutions will be comfortable more with Dreamweaver/Photoshop/Illustrator than Eclipse/GIMP/Inkscape.
I took the Linux route, even though I already owned a Mac, I felt on Linux I was closer to the metal where Mac OSX had too many safety rails (both for the user and many publisher's safety)
And damn, the hardware is just nice. If I could run Fedora on a MacBook Pro, that'd be my ideal setup. Or if OS X wasn't so terrible at customization -- the number of sketchy hacks I've had to install to get my setup how I like it is just depressing.
Prior to Ubuntu, this was a no-brainer, setting up things like a wireless adapter could be a trial. I run Ubuntu on a System76 laptop and have been happy with it. I like being able to get the source for everything I use and be able to patch it.
I ask because a friend who works in IP Law recently was telling me how she needs software engineers to come and work for them (DLAPiper is the firm) as experts. They even help you pay for law school if you're interested in that.
If that sounds at all like an interesting challenge hit me up at shmandell at gmail.com for more information.
I strongly recommend asking on the Racket-users Google Group as they'll know more about educational use than I, but Racket is actively used to teach 13 year olds programming in maths at school, and the basic Racket education program doesn't even teach mutation until much later.
The Racket group is here: https://groups.google.com/forum/#!forum/racket-users
I also know there are some youth education specific resources here: http://www.bootstrapworld.org/ And here: http://www.wescheme.org/
I might also recommend the Little Schemer, which presents and teaches recursive functional programming as if it were a book of puzzles. Realm of Racket is also pretty cool, though it does assume at least some programming knowledge already (it was written for first-year CS students), and you could try the early exercises in How To Design Programs as well (though I find them a bit long-winded and it may bore a younger programmer).
Good luck! I started programming at around that age, and I wish I'd had resources like Racket. If I'd discovered FP and Lisp then, I might've stayed with it instead of taking a break for ten years.
Running an imperative program comprise of setting up some initial state of all the variables and executing the steps in it, after which the state of all variables contain the result.
Running a functional program comprise of taking the input value, and following through the definitions and the end, you will have the result.
The difference between the two is that with imperative programs, there is a dependency on the state at every step. This makes it harder to write complex imperative programs. Functional programs does not have any steps, and hence no 'states' and hence eliminates this overhead...
As for a first language, my opinion is Racket unequivocally. The Beginning Student Language is entirely functional and the ecosystem offers a gradient from there to just about any point on the spectrum...from Typed Racket, Datalog, Lazy Racket and Algol 60...all within the same package, DrRacket.
Racket is also designed as a teaching language and extends that part of Scheme's mission. It has decades of educational research in its history.
Two resources I can recommend are:
The second link in particular is quite an in-depth look at the more theoretical side of functional programming but in the first part it deals with fundamentals, and is not super complex to follow.
I say this as someone who can grasp the basics like functional composition, currying, partial application etc. but not stuff like monads, functors, etc. so take my advice for what it's worth :)
 - http://www.amazon.com/Introduction-Functional-Programming-Ca...
If your child already understands some OOP concepts like objects, classes, you could approach it from that perspective, that is, functions are special case of classes (and then explain why we want this). The whole Clojure language on top of JVM is built on this idea, so why not.
The most important take away for the kid is that these are programming paradigms, i.e. different approach used to solve the same programming problem.
You can sugar-coat the story accordingly. It doesn't explain the entire concept, but gives a quick glance at the difference. I am not sure it's going to work or if it's exactly what you need. If you try though, I'd like you to share the results with the rest of us :-)
(Also, if you are in the U.S. then as much flack as Java gets as a language, it is the language used for the College Board AP exam for Computer Science (https://apstudent.collegeboard.org/apcourse/ap-computer-scie...)
site:news.ycombinator.com some words i remember
you can use google's search tools to help you too.
Might be Ritzy or Ghost.