Each section contains a story of some situation he was in where he faced a problem which he solved by applying one of various algo techniques (DP, divide and conquer, etc.). After reading CLRS for a class, it was nice to see how some of the most common textbook algorithms have been applied by a notable computer scientist.

OK, this is an oddball one, in that a book on Evo Devo is pretty far from CS, but reading it completely changed how I look at software architecture, protocols, formats, programming languages, and a whole range of other CS-related topics.

Superficially, it is what it says on the tin: an examination of the mechanisms by which life manages to evolve at all, that keep most mutations from being immediately lethal, and instead have a decent chance of producing (potentially) useful variations.

But under the hood, I've found it extremely interesting how and why so many aspects of the living world are resilient and even antifragile, and there is are lot of useful ideas and concepts to mine beyond relatively superficial biomimicry like genetic algorithms, neural networks, or even "design for failure" approaches for software and services.

Read it, and you won't think about "Worse is Better", "Bus Numbers", or Chaos-Monkeys the same way ever again.

Like others in this thread, this is more (only, in fact) about programming but I found The Go Programming Language to be an absolutely perfect introduction to Go with fantastic examples and succinct prose. It's beautifully typeset as well, which doesn't hurt.

This is cheating a bit, because the book is history of computer science rather than computer science, but I think anyone interested in programming should read it. We often think about history of computing (and what it teaches us) in a retrospective way (we see all the amazing totally revolutionary things that happened), but it turns out that if you look deeper, there is often a lot more continuity behind key ideas (and we just think it was a revolution, because we only know a little about the actual history). This book goes into detail for a number of major developments in (early) programming and it makes you think about possible alternatives. It was one of the books that inspired me to write this essay: http://tomasp.net/blog/2016/thinking-unthinkable/

More about programming than computer science, but it does talk a lot about and show some custom algorithms (it's more about programming-in-the-small, though it does talk about some big picture too), also it is old and out of print (last I checked), but I thought it was really good when I bought and read it, so mentioning it:

Writing Efficient Programs

Also has a great bunch of "war stories" about performance tuning in real-life, including one in which people, IIRC, improve the performance of quicksort on a supercomputer by 1 million times or some such, by working on tuning as well as architecture and algorithms at several levels of the stack, from the hardware on upwards.

Has anyone read Probability and Computing: Randomized Algorithms and Probabilistic Analysis by Michael Mitzenmacher, Eli Upfal[0]? If so, how difficult are the exercises? Aside from doing problems I like to read solutions and analyze them to learn better style, new techniques/ideas. Are there any books like this one, but with solutions? Thanks.

> This book will help you navigate the diverse and fast-changing landscape of technologies for storing and processing data. We compare a broad variety of tools and approaches, so that you can see the strengths and weaknesses of each, and decide whats best for your application.

This book proposes how to write C++-ish code in a mathematical way that makes all your code terse. In this talk, Sean Parent, at that time working on Adobe Photoshop, estimated that the PS codebase could be reduced from 3,000,000 LOC to 30,000 LOC (=100x!!) if they followed ideas from the book https://www.youtube.com/watch?v=4moyKUHApq4&t=39m30s

Another point of his is that the explosion of written code we are seeing isn't sustainable and that so much of this code is algorithms or data structures with overlapping functionalities. As the codebases grow, and these functionalities diverge even further, pulling the reigns in on the chaos becomes gradually impossible.

Bjarne Stroustrup (aka the C++ OG) gave this book five stars on Amazon (in what is his one and only Amazon product review lol).

This style might become dominant because it's only really possible in modern successors of C++ such as Swift or Rust, not so much in C++ itself.

This book changed my perception of creativity, aesthetics and mathematics and their relationships. Fundamentally, the book provides all the diverse tools to give you confidence that your graphics are mathematically sound and visually pleasing. After reading this, Tufte just doesn't cut it anymore. It's such a weird book because it talks about topics as disparate Bayesian rule, OOP, color theory, SQL, chaotic models of time (lolwut), style-sheet language design and a bjillion other topics but always somehow all of these are very relevant. It's like if Bret Victor was a book, a tour de force of polymathical insanity.

The book is in full color and it has some of the nicest looking and most instructive graphics I've ever seen even for things that I understand, such as Central Limit Theorem. It makes sense the the best graphics would be in the book written by the guy who wrote a book on how to do visualizations mathematically.The book is also interesting if you are doing any sort of UI interfaces, because UI interfaces are definitely just a subset of graphical visualizations.

Even though this is an Erlang book (I don't really know Erlang), 1/3 of the book is devoted to designing scalable and robust distributed systems in a general setting which I found the book worth it on it's own.

I looked at the Microsoft Virtual academy videos [1], they cover a lot of basics but were usefeul, having the creator of powershell teach the course helped understand the philosophy behind it.

When searching for tutorials online, "the scripting guy" was useful, but more importantly I make sure to search for powershell v5, v4, or v3 tutorials. - There are lots of "old" tutorials, but I think there were major changes between Powershell v1, v2, and v3, so I try to avoid those, especially regarding modules

I have to use Windows at work, and do not know Powershell. Several times I've debated learning it, but never put in the effort.

Now I use Xonsh (http://xon.sh/). It is a Python shell - cross platform and similar semantics to bash, etc. I was never a power bash/zsh user (scripting in them is Hell). The nice thing with xonsh is that it is Python. If you want to customize your environment, have complex aliases - well, you just write Python code in your config file.

Learning PowerShell for Windows is the ideal. But xonsh is a good intermediate solution for people who don't want to invest in going all the way.

(To be honest, I'm seriously considering switching to xonsh for my Linux machine - currently I use zsh).

Protip: You'll find two app on Windows called Powershell. One is just called Powershell and the other is called Powershell ISE. I mistakenly picked the regular one, to later find out that Powershell ISE is epic. It's like a combination of a terminal and some kind of IDE.

I may be an outlier in this regard. I learned PowerShell by starting to golf in it. However, while I know the language quiet well, I'm completely useless at using it for administrative tasks, simply because I've never done that with it. I use PowerShell as my go-to scripting language, calculator, interactive .NET playground and a bunch of other things, but rarely for managing Windows servers.

I can recommend the PowerShell cookbook too, though. I've been a technical reviewer of the 2nd edition and at least back then it was good :-)

dkarapetyan linked a good Cookbook. That's essentially what you're asking for. In addition to that, when I had to learn Powershell I found "Learn Powershell in a Month of Lunches" quite useful. At the time it was considered the go to book for PoSh, but that may have changed.

If you can get hold of either Bruce Payett or Lee Holm's PowerShell scripting books, those are pretty canonical guides, as both of those guys were devs on the PowerShell team for years. On day one you should get familiar with the discoverability features built in: get-member, get-help, get-command, get-member, tab completion, get-alias, etc.

Whilst you might get some value in trying to learn in a structured way, I'd say you'll get much more out of it if you try to scratch your own itch.

In other words, think of something you want to script, then try to learn how to do that in PowerShell.

What I think you'll find if you try learning something as vast as PowerShell with a general approach is that, whilst you may pick up some decent general habits, you'll also find yourself learning a whole bunch you never use.

Learning PowerShell is different from learning a conventional programming language as each use case you'll have will make use of different commands. It's like having a DSL for each use case. You'll use different commands for Active Directory management, for Azure management, for file processing, etc... As long as you know the basics you can pick up whatever is going to be most relevant for what you do.

Effectively, forget about desktop and cmd and only live in powershell. That is what I do - Posh is my operating system, it autostarts with Windows. In a several months you will be effective user, but to master it will still take years.

- Do not use junk GUI editors such as ISE. Visual Studio Code is way better if you have to. Sometimes is OK when debugging. I would suggest vim because speed is of great importance in shell world.

- Follow reddit community and ask questions there rather then on SO which is full of achievement biatches. Redditors will help you for free for the joy of sharing the knowledge.

- Use Github to store all your stuff. Also, in coorporation you can use NAS share to let anybody import stuff from there.

- DO NOT LISTEN naysayers about aliases - use default alises all the time. They are cross-platform and well known and I can go into neurolinguistics of why is it better and easier for the brain but I don't want to do it here. People will certainly whine now but ignore them. DEFAULT (READ ONLY) ALIASES ARE THE BEST. Particularly, if you see somebody does foreach-object or where-object just kill him ASAP.

- Do ALL windows config from Posh. If you don't know ask around. If you are devops dude, you can thank me later, especially when you learn DSC and apply all that knowledge there or with boxstarter.

- If you happen to be locked in older posh use PSReadLine. Keep in mind that $host.Version -lt '3.0' is full of surprises and use latest version if possible.

- Do not compromise with others in coorporation. Ask for script for everything. If sysadmin tells you that server is low on disk you ask for proof in the form of the command you can execute. Ask for invoke-sql when using databases. If you give admin a job to create a IIS site for your web app ask for a script. If you are a project manager, do not close tickets without a script.

- If you monitor vendor excursions in your company infrastructure, ask for transcripipt of ALL operations they do. You will thank me later. Do not sign their work without it.

And if you don't enjoy PS almost every single moment you are doing something wrong.

PS: I do not work for Microsoft :) I just think bash and friends are ridiculous in 2017 and honestly a little embarrassing. Do not do that - install Powershell on Linux and Mac if you have to and keep your sanity.

PS2: Somebody will certainly say that ruby/python/whatever is great on linux side. Ignore them. Those are not shell languages (while great otherwise and valuable in your skillset - cinst ruby python etc. is among my mandatory stuff but lets keep perspective here).

Powershell is frankly fairly amazing. Recently I found myself needing to open the Windows datastore.edb file, and before I discovered some interops I learned that in fact you can grab a C# member definition, then use it as a signature and load that type as a Powershell object [1]

Hell, I even found a C# code snippet and was able to add into a Powershell string, then add this as a C# type definition, and Powershell compiled it to an assembly and then loaded it as an instance of a Powershell object.[2]

I believe the best way to learn powershell is by using it as your shell, everyday, for real-world tasks, particularly in your job.

Start small, with ls, cp and cat, and don't force the pace. psh is a shell first and foremost- a shell with a very nice language, but a shell all the same. So get comfortable using it as a shell.

First thing is to create your $PROFILE. Google for an example and see if you can edit it to suit you. Then get chocolatey, PSCX (psh community extensions), posh-git and vim, and get used to doing most of your work on the command line (like you'd do with bash, on Linux). See what tasks you can automate by writing a few short scripts- very simple things at first, like copying and renaming files, setting up directory structures and so on, then progress to processing xml and setting up scheduled tasks, and sending email, setting up credentials etc. After a few months you'll find that you can wean yourself of windows GUIs for most of your everyday tasks and probably all of your not-so-everyday ones.

psh being a command-line tool, it's far easier to learn it like that, than trying to learn the language first. You can learn the basics of the syntax allright, but there's a bazillion commandlets that you will never be able to remember, unless you use them in your everyday work, and incorporate in your scripts, and those commandlets are often integral to the use of psh. Basically, you can't separate the language from the use of the shell, so you shouldn't try. Learn them both at the same time.

% % %

Here's my personal example: I learned psh to avoid the long rdp queues in a past workplace.

I guess that company didn't want to shell out for more windows server licenses and so there was a limit to the number of people who could rdp to a server at the same time- just two or three people per server. So there was always a bit of a queue and I often had to wait between a half hour and a couple of hours before I could get a slot. Or someone would go for lunch and forget to log out, and you had to kick them out and it was generally a big drag.

At some point I started using psh as my windows shell, and then I found out about windows remoting [1], which sounded a lot like ssh on Linux- basically, it lets you open a shell on a remote computer. Next time I had a slot on a remote machine, I enabled remoting and suddendly I could do all the work I needed on the command line, while everyone else still had to wait in line for an RDP slot [2]. Needless to say, this made my life and my job a hell of a lot easier, not to say pleasant (I might have had a few smug smiles on my face, at times).

I'll note there was only one thing I couldn't do remotely: running a proprietery installer for the company's platform, that only had a gui and no command-line options. Everything else, including a whole bunch of SQL stuff, I could do it remotely, on psh [3].

All this naturally pushed me to do more psh scripting, as it was easier to run a script than key in a dozen commends on the command-line. So I left that job feeling very comfortable with powershell, and although I didn't quite have to use it that much in any other job since, I still use it as my primary shell at home.

____________________

[1] I think it started with this article, whose title immediately caught my attention:

[2] Noone else cared to learn powershell. I did ask. They said they didn't want to have to learn a new programming language. To be fair, I never explained my remoting setup to anyone, because they would probably tell me to stop using it (I was just a junior dev at the time). Note also that I never enabled remoting on any of our public-facing servers, just in case there was some vulnerability that could be exploited.

[3] I also used vim and netrw to edit my scripts on the remote server directly, over a UNC path, so I didn't have to re-upload them every time I needed to change them. This was a very Linux-y way to do stuff and really unusual where I worked.

JavaScript is a must know if you want to do web work. It's as necessary as HTML. It's the only language browsers actually natively run.

Ruby on Rails is sort of the basis for most any other modern MVC web framework. That is to say it inspired nearly every other web MVC framework, in most other languages. If you can use Rails you'll be able to use most anything else. Prior to Rails most web apps had proprietary frameworks powering them or no framework and were just an bunch of "pages" (endpoints) loosely strung together.

Rails also, for better or worse, has one of the easiest to use ORMs-- ActiveRecord. This helps new folks worry less about the intricacies of learning SQL (or whatever your persistence layer is) and more so about what writing a web service is really about.

Ruby as a language is also very expressive, is truly object oriented, and has all the right building blocks (that's kind of a pun actually), plus a very large amount of documentation and examples. It also is very good for meta programming which is what enables a lot of the rails magic (and fun).

At the end of the day learning more languages like PHP, Python, Java after Ruby is fairly trivial. I always tell noobs to learn whatever is useful for them, and stop worrying about what language.

I started with Ruby 10 years ago and now can write Java, PHP, Python, Scala, Elixir, Objective-C, and Swift; though I am by no means an expert in all of them. At some point you'll realize you've learned concepts and they're what is important. Not syntax.

Programming concepts come more easily the more gradually they are revealed. Nobody has any concept of what a stack overflow is or why it's important on day 1. Ruby is approachable and fairly forgiving and (at least in MY opinion) VERY readable.

Full disclosure: I went to engineering school for 2 degree and then later attended (and currently work for) a code school.

I can say that I can see a marked difference in students that go through Ruby as a first programming language vs JS. Ruby-first students are more ready to deal with new ways of doing things and they are, in general, less likely to have serious learning issues. JS-first students tend to have more consistent problems grasping things like scope and return values. It IS possible it's bent as such due to our curriculum, but all I can tell you is what I've seen in our students.

Code camps were a product of the mid-to-late '00s, and the premise and format has largely remained the same.

In the late 2000s, the popularity of Ruby exploded when Rails gained mindshare. Rails, along with its healthy share of innovations [1] and productivity gains [2], was a good fit for code camps because it took little effort to crank out a basic CRUD app. Such fast feedback is very impactful on people who are just starting out programming.

Despite other frameworks borrowing from RoR in the years to come, Ruby's culture is largely compatible with the notion of 'programmer awesomeness' -- where a motivated coder is given a powerful toolset and is allowed to do great things, even if they're a bit quirky -- and is lighter on idiomatic dogma than some other languages that are popular for greenfield development today. While those idioms and mores are an asset to the languages that have them, they may stifle independent exploration and make people more afraid to make mistakes, which are quite detrimental to new learners.

Meanwhile, since the late 2000s, Javascript has become practically mandatory, largely buoyed by the HTML5/Web Platform effort and browsers finally getting their act together, but also by Node opening up an entirely new frontier for JS in a very desirable application domain. This, coupled with the JS community's tolerance and encouragement for exploration and independent re-discovery, also makes it a good fit.

Look at the goals of a bootcamp in the first place - to get you just enough knowledge to have the minimum skill needed to be useful to a team. They are not trying to make you a computer scientist... they are trying to teach you as little as possible, while still knowing enough to get work done, which means knowing how to work with a toolkit that does most of the work for you. And RoR does that. It also is popular enough that once you know it, you can probably find a team using it that needs help.

I'd guess Javascript is quite popular[0] because it's literally on every modern computer and has incredible reach[1]. It's also a bit of a kitchen-sink language so students can grow into a style and paradigm that suits them. Plus there's nothing to install to get started... just open a browser.

I think it hardly matters which language you learn first. I went to a Ruby bootcamp but Ruby is #4 or 5 on the list of languages I've used most since then. I didn't use it at all in my first job after the bootcamp.

Those programs are three months out of your life and then you're back to learning on the job and in your free time like everyone else.

I think a dynamic OO language like Ruby or Python is a great place to start but it doesn't really matter. Any mainstream language would be fine.

A lot of it might just be timing. Dev Bootcamp (the original bootcamp?) started up when Rails was the cool kid on the block, and it was a break out success. They proved there was a market, and the busy model was easy to clone. A bunch of Rails bootcamp copycats popped almost immediately.

My guess is that they are the flavor of the month (knowing only Rails+JS is widely employable), and have a low enough barrier to entry that you can realistically teach someone enough to be useful in the timescale of a bootcamp. Add a little HTML/CSS and you can do front end as well.

I think the auto-magicness of Rails helps, since it gives you so much even if you are relatively inexperienced. Then you have a jumping off point, to start learning on the job, earning money and you can ostensibly choose your own adventure from there.

edit: I'm not sure what's objectionable about this comment. I'm new here and trying to be helpful, so if I've gone against some rule, I'd like to know so I can learn from it.

IMO Ruby does a pretty good job hosting a bunch of different programming paradigms and techniques in a consistent way. Whether or not that's ultimately a good thing in a language, I don't know, but I can believe it has benefits in an educational context. Add to that the popularity of the language in general, and it seems like a decent choice for a "boot camp" style education.

If there's a real argument to be made for the pedagogical merits of Javascript, I'd love to hear it. There does seem to be a sizable job market for relatively inexperienced Javascript developers, though.

I think the question that I'd really love answered is why do all of the bootcamps focus on web development. Why don't some focus on systems development, operating systems, trading systems, and other things that won't be covered that I'd consider "important programming" stuff.

Both frontend and backend, definitely if you are to be in charge of a project that involve security and quality coding on both side that most developers must be proficient and competent to deliver with "Web application" framework.

Because they are the (one of the) easiest ways to get things done. Did you have a specific question? This seems to be one of those questions that will bring out the trolls and people will start talking about elixir, rust etc.

Most actual work is in "php". But, it isn't 'hip' anymore. So, they teach ruby. Ruby is more difficult and less clear. Rails itself is a land of 'gotchas' (I have 10 years exp in both). After learning ruby/rails it will be difficult to find work and understand basic database constructs.

Web is the most accessible medium. If you can view it in your browser, so can anyone else. There is no complex configuration or build process (though it seems the JS community is dead set on changing that). What You See Is What You Get. It's an immediately useful and intelligible medium and you mostly stay away from the really scary things. Teaching simple web dev first makes sense.

Rails is probably chosen mostly out of the false tradition that Ruby is a good beginner's language or the also-false tradition Rails is a good framework.

You ask this as if all coding bootcamps teach these things, which I highly doubt to be the case. In fact, I'm aware of several "bootcamps" for both Java and Python. Hell, there's even one out there for COBOL: http://www.wintrac.com/courses/mfcobc.asp

As someone who ended up learning Ruby (and Rails) for a previous job, I can attest that it's a great language from a learning/teaching perspective. Huge ecosystem, the syntax is actually readable, you don't have to fiddle with compilers, and so on. As mentioned in other comments, Rails is also the archetypal MVC framework, for better or worse; while I don't personally care for it, it gets the job done and is in relatively common use; in terms of getting students from zero to hireable quickly, Rails knowledge is pretty useful.

Meanwhile, Javascript is one of those necessities for web development, for better or worse, so a web-centric bootcamp will understandably put some emphasis on learning it.

Ask ten people to write a hello world in js, and they all will do it, and do it the exactly same way - this is great for a production language. On that point, JS is as good as C/Cxx

The downside - ask 10 people for an example of proper use of advanced oop in js, and out of these 10 you will get 5 passible anwers all of which will be drastically different - horrid thing for production

Most dns servers don't allow zone transfers, so I don't believe you'll be able to enumerate domains like this.

In general enumerating domains is not really possible (you can't just dump all North Korean domains for example, and people have tried).

I'd start by figuring out how they are blocking sites. Probing to see which IPs are blocked would be much easier. There are various tools to lookup which sites are hosted on a given IP address (using crawled data).

One way to do this would be to try connecting from outside Pakistan (e.g. EC2 server) and from inside and seeing if a IP is blocked.

Scanning all 4 billion IPs surprisingly doesn't take too long on a modern internet connection.

I own https://www.DomainDetect.io, we pull new domains from Zone files/3rd party sources daily. ~200,000-400,000 domains per day to alert on new phishing sites for businesses. So we do something similar. I would start with something like https://czds.icann.org/en attempting to resolve them asyncronously in your country, then work your way through the new daily additions. Use an ElasticSearch/Cassandra backend for speed to query that volume of information.

Your problem will come from the countries/TLD's that dont play ball with their zone files. These are trickier to obtain.

My two cents: Don't do it on your own. Contact NGOs that work on the censorship issues, EFF, AccessNow, FLD, etc.. They have been working on these issue for a while and probably can help you with their resources.

The most ambitious book in that regard must be Guns, Germs, and Steel (http://amzn.to/2jKq9ku) by Jared Diamond. It aims to answer the question: "Why did Europeans end up killing/conquering/... American Indians, and not the other way around?

You'll find lots of people saying Diamond has been "debunked" but by that they mean "here's some criticism someone posted online". It's a remarkable work of analysis tracing the causes of human progress over thousands of years.

Reading Fukuyama's "The Origins of Political Order" and part 2, "Political Order and Political Decay" is a really good sweep on political progress where it comes from and whether or not it's inevitable (hint: it's not).

Fukuyama is a real realist. What I mean by that is that he doesn't deny that progress has occurred (something some people believe), but he points out how precarious that progress is and that it can go away (something some people deny).

I don't understand why it's a controversial statement to say that progress isn't inevitable and that decay can sometimes happen, but for some reason it is. I think his books, among many other things, are useful for grasping that progress takes hard work and can, like anything in this world, be ruined by laziness, corruption, or simple accidental misfortune.

The box is a really interesting history of the shipping container. It's looks at the intersection between the technological, political and business aspects of the struggle to introduce a more efficient but highly disruptive technology. It changed the way I think about driverless cars.

bill bryson, a short history of nearly everything. It is basically a history of what we know and how we came to know it i.e. what experiments were performed, what led to other things etc. Really well written.

Human Accomplishment: The Pursuit of Excellence in the Arts and Sciences, 800 B.C. to 1950 by Charles Murray. The author did statistical analysis to find the most influential figures in each field of endeavour, from philosophy to music.

The Ascent of Man: A Personal View, by Jacob Bronowski should be on any list about Human Progress, especially technological progress. The book is about the progress, pitfalls and misgivings of technological progress.

"The Gun" by C.J. Chivers is about the history of the AK47 and how it changed war. The AK remains an affordable, durable piece of technology that anyone could use, and effectively do so with minimal training, while in the process disrupting structures of power.

I think everyone will need a bit more context around what you do know prior to answering the question. Front-end development has somewhat quieted down from the crazy pace of the past few years -- or maybe I just settled into a stack and have given up, who knows!

But a lot of the major players (e.g, Webpack/React/Angular[!2]/TypeScript/etc) have all been around for more than a year, so context is important.

I would pick a set of technologies that you want to learn. This will require a bit of research, of course. It's a bit of a personal decision, based on your predilections and your past experience.

There is a ton of activity in the space, of course. I would first glance at the ECMAScript efforts of late (ES6 and ES7 in particular). You'll probably need to use Node.js, since it tends to be the center point of JS development, regardless of the tools and frameworks you choose.

The first piece is your build tool. Grunt and Gulp are the two top build tools. Gulp is more recent and seems to have more uptake. If you haven't written a build script (e.g., gulpfile.js) I recommend building one up from scratch rather than using someone else's. You could use others' for examples of what to do, but build your own from scratch according to your needs, as you go. You'll learn more and understand the whole thing that way.

The next choice is whether to use a transpiler or not. The two biggies are Babel (ES6 transpilation to ES5 or ES3) and TypeScript. You can skip this step at first, but it will be a foundational aspect to your build, so don't wait too long. If you do skip it, loop back once you've made your other choices.

The final big choice is framework. The big ones right now are React and Angular 2. There are many others, of course (Vue, Inferno, ...). You might try a few efforts here to learn about them if you don't have a clear initial default choice.

There are secondary choices depending on which main framework you choose. For example, if you use React, you will likely need a client-side store. Flux used to be the default. Now it's likely to be Redux or, more recently, MobX.

There hasn't been a better time to be a JS dev. There's still a lot of churn, but there's also more stability than there has been in the past few years. You can stick with technology choices for a year or two without major disruption if you make course corrections. Good luck!

IMHO to be a good frontend developer you need decent comprehension of JS/CSS/HTML. Some framework experience. Some backend / upload knowledge. Know git. Not an asshole to work with.

To be a better frontend developer you need human skills, strong raw JS, the ability to move between frameworks without whinging, and solid knowledge of cross-platform desktop/phone/tablet/TV development. Can happily code a frontend direct from either an API spec or a vague informal concept. Have written and used automated tests with git.

To be an awesome frontend developer you need all of the above but are comfortable doing web as well as multi-platform native development, can run docker or another toolchain for rapid iteration and integration with backend developers and QA teams, have great people skills, have executed multiple projects where security/reliability/offline mode/multilingual design were front and center, and have learned basic lessons about cutting corners by maintaining at least one or two nontrivial projects long term.

> What are some need to know things in terms of frameworks and workflow that I should be aware of?

Strange times, isn't it? 10 years ago, a front end job would require a comprehensive understanding of CSS, the DOM and JS. Now it's all about framework X and Z, build tool A or B, Typescript and what not, like these tools are so complex one has to be a specialist in these tools because they can't be learn in a few days.

Meanwhile, micro-services are all at rage on the server and back-end developers deemed big frameworks like Rails,Spring,Symfony and co an anti-pattern because complexity is bad (Go)? But stupidly complex tools and frameworks on the client are OK?

Erlang - Actor-based software design and its inherit benefits are trivial to implement compared to (most) other languages. By design, almost trivial distribution across many nodes without resorting to specialized APIs (that aren't common across all platforms) or separate coordination languages.

Ada - The type system and the manner in which it can be used to constrain your software (in a positive way) makes ensuring certain safety/reliability much easier. Compare in C, an int is an int. If I make a "temperature_t" it's just a double or something that's aliased. Where as "kelvin_t" in Ada can be made to be only the positive real numbers.

Lisps - I'll include Common Lisp, Emacs Lisp, Scheme, Racket, clojure, etc. The meta programming (ruby has this too, actually) makes it much easier to develop large programs almost automatically. The meta programming nature allows you to, within the same language as the primary program you're aiming for, extend your language and program. This reduces the friction of the meta programming tasks, consider C. You can use meta programming, but it requires at least one other language.

Plenty of others, three (languages and families) off the top of my head.

Idris and Coq which have more advanced type systems allowing you to create proofs for you software. There are not many languages that allow this.

And Shen which has a Turing complete type system meaning it is very flexible but type checking may never halt in certain conditions. I do not know of another language with these properties.

Haxe allows you to target absolutely anything and if you miss some exotic it is trivial to allow generation for it. It is also quite mature language with a macro system. Again, maybe MonkeyX compares somewhat but has far less backends and making a backend is not so straightforward.

K and Q and their parent APL which allow you to write the most terse code you will ever see (some make a sport of it).

Forth you can implement in a few hours on any platform and yet is a very powerful language which makes it easy, once you get used to it, to write terse but easy to understand code. This one I would say is, compared to other languages including Lisp, easier to implement naively while still keeping solid perf. There are also lists of minimal instruction Forths which show you how powerful and easy the basic constructs are and how rapidly you can make a toy language.

Haskell and Scala are pretty awesome at embedded DSLs, because of do-blocks. You can use them to bind some value to a symbol (i.e. assign a variable) inside the eDSL, which isn't possible in most languages. (Contrast this to, say, eDSLs in Java, which are limited to fancy builder patterns).

I only have one outdated smartphone, bought about 2010, and discarded late 2015 simply because the USB charging mechanism was too worn out (could have got that fixed, but wanted Android 4.x which it couldn't do); was on its second battery. It now sits peacefully in my desk draw at work.

Possibly unpopular opinion here on HN. I almost went to VIT in 2007 (shockingly got into NIT Trichy instead).

1. Focus on becoming a good programmer (ie, SPOJ/Topcoder/Directi). That'll help you clear interviews, and get good at thinking about algos and data structures. I'd even prioritize this over other CS fundamentals.

2. Keep your GPA up and get into a good grad school. I disliked both the interview process and the classism (ie, recruit from top schools) of Indian companies when I interviewed there.

3. If you don't want to go to grad school, make sure you don't touch TCS/CTS/Wipro/<insert mass VIT employer here> with a 100-foot-long- pole. Given your passion, and assuming you use the next two years to become a strong programmer, you will find a good place to work in Bangalore. You might have to pay your dues, but please don't pay them at the above mentioned places.

And people who look at you as second class undergrads can fuck off (esp the professors at IIT Madras :) ). I know several friends at IITs that preferred to pot-smoke-away their time there. If you're near Chennai I'm happy to chat with you.

You are doing great! Don't let institution name bother you, it does not matter much, it helps in getting interviews etc, but if you work smartly you will get that anyway. Few things I would focus on:

1. Build a strong CS and Math background, especially since you are interested in AI, ML. Academia is the best place to do this. Look at the curriculum of top engineering schools like mit, cmu for your sophomore year and see how you can complement it with the courses you are taking. This will pay you dividends in future. You are already doing that, which is great! Try to add more structure to your execution.

2. Take advanced courses on the topics you are interested as you get to your senior year. A lot of MOOCs have entry level courses but lack on advanced topics. You will find these scattered across university lecture videos, you already mentioned OCW.

3. For prototype projects try building things from the ground up. For e.g. Taking an Operating systems course great, build a simple filesystem from scratch. It will help you in understanding the complexity involved in production grade software and why certain design choices are made.

4. For the projects that you are passionate about deep dive into it, its great to see people talk about their projects with deep technical insight, pros and cons of design choices made etc.

5. Personally I would avoid learning every new language that comes up, focus more on programming language concepts (there is a course of Coursera on this) and learn few languages well.

6. For internships look for startups that are working on interesting ideas.

7. More than the certificates the projects what you did in those courses are more valuable.

You are aiming too low. Why do you want to be on par with the best? Why not exceed them? My advice to you is to learn more than computing. We tend to obsess over languages, frameworks, algorithms & tooling.

Learn "software engineering", this has nothing to do with language, framework, algorithm or tooling. This is about code organization, managing complexity in code, deciding how to structure/architect an application. This is where you are going to read what some will consider "boring" books, these books will hold very strong opinions and are not exact science. You will have to take that knowledge, apply your experience and come up with your own reasonable opinions too. Here are sample of such books in my library, "Business Process Management", "Ship It", "Architecture Principles", "domain driven design", "Enterprise integration pattern", "Clean code".

The real world doesn't care what language, framework, algorithm or tool you use. They just care that you solved the problem. This means you must understand some other domains outside of tech. If your domain is only tech then you will be building tools for programmers/IT folks. If you understanding banking, insurance, health care, automotive, shipping, etc, you could apply your knowledge towards the difficult or poorly solved problems in those areas.

If you become well rounded, you will have the skills to implement, the domain knowledge to solve pressing problems, but more importantly the wisdom to know when to and when not to break rules.

Colleges rarely teach you what you need to know professionally - they can't, tech moves too fast. Instead, they teach you how to learn what you need to know. This is an important distinction because it should inform your approach to your professional growth.

1. Stay passionate both about software and your own growth/education in it.

2. Start some personal projects and, important, work on them until they reach a place where you can talk about what you learned, the techs you used and be able to at least show a page or two of it working.

3. Be forthcoming in interviews about your desire to create. The longer i am in software the more importance i put on hiring creative people.

Finally, think of software development as modern day blacksmithing. Those who do well have a few things in common: passion, persistence and a great set of artisans (mentors) to learn under. Prioritize finding some people who have compelling opinions on software development and work with them. It will change how you build software and the value you will bring to teams in the future.

Having come from a similar background, I can offer you these suggestions -

1. The level of programming taught in Indian universities is not enough. Writing a sort program is quite different from writing good, maintainable OOP code. Apart from working in a good company, one way to develop this skill (which I feel is critical) is to look and contribute to good open source projects - elasticsearch, spark, etc. Unfortunately I don't know of any good books which teach this overall, apart from specific aspects like Effective Java.

2. Another aspect that I feel is missing in Indian universities is challenging assignments. I would have liked to write my own toy OS to learn systems, or toy kafka to learn distributed systems. The more core computer science fundamentals you master now (preferably through writing code along with learning theory), the better an engineer you will be later.

3. Another aspect that is lacking is the way to reason through things. Indian universities have a third-person approach on the lines of "the experts do things this way so we will just do it this way", on the contrary in a US university the reasoning is more on the lines of "we use to do X, that had Y limitations. So we moved on to Z, now your assignment is to design an extension to Z (say Z+) which solves YY limitation". Unfortunately, I don't know what can be done to improve the way we reason about things.

4. Don't forget to explore different areas. I started with computer graphics, moved on to compilers, then app development, then data engineering, then infrastructure development, then back to data engineering.

Study after study has shown that going to a "2nd grade" university makes no difference to your skill level and lifetime earnings. They basically compared people who were accepted to "top grade" universities and chose to go somewhere else with people who did go. So don't stress about it. Simply learn as much as you can on/off university.

1. Apply to startups. If you are looking to apply to the big four, make sure you do your diligence and work hard at coding contests.2. Practice peer-teaching. VIT is a huge college. There are more people like you, and you can easily help each other by doing projects together.3. The industry, in general, rewards freshers who have worked in large teams and projects before. 4. Make sure you get a good internship. Shouldn't be hard for you, but if you are interested, drop me a mail (Razorpay, Bangalore)5. Go for depth first and then pick your specialization within software. For me it was Web Development and Software Security. Could be anything for you, but make sure you have tested the waters in other fields before picking one. The one benefit of College Life is that you have time to experiment and fail. You can try out projects in all these different fields, and then decide what you are really passionate about.6. GSoC is a great option. I'd recommend trying for a experienced org over a new one. 7. Avoid freelancing, unless absolutely necessary. It rewards short term gains, over long time learning. You can make much more money cloning WordPress themes and reusing them across projects then learning a new programming language. The latter would help you much more.

I'm very interested in Software Education in India, and if would like to talk more, drop me a mail (email in profile).

Real work is always more impressive than academics. The sooner your schoolwork fades into the background of your career the better.

Many posts here emphasize direct skills, but it is important to understand that the modern workplace requires a broad range of skills in particular related to communication. One specific communication methodology which is worth learning is Nonviolent Communication which can enable people with different contexts and points of view to have useful conversations that resolve significant conflicts.

Code that solves a real problem or runs a real (viable) business is more important than any degree certificate you will ever get. 93% top most successful corporations in America are managed by people who come from 2nd and 3rd tier grads. Steve Jobs was a college dropout.

I am glad to see a question asked from college student. I am always interested to hear from others in college. I am twenty-one-years-old, attending a community college in the states and studying a bit of computer science.

I am going to go off on sort of a tangent and offer you some general advice:

1. Do not worry about what other people think. You mentioned in the beginning of your question about being looked as "second class undergrads", and that is completely false. As Rainer Maria Rilke once noted: "Your life is so inexpressibly your own..."

2. Build things you are passionate about, and not because they'll help you land a job but just for the sake of building things. If you are interested in artificial intelligence or machine learning, learn about them and build something. Better yet, keep a blog and write about the process of learning about AI, ML, etc. Don't be afraid to email some people you look up in the industry for guidance.

3. Keep learning, learn about anything that sparks your interest. Nothing is boring in its deepest essence. There's always something to learn. And if you know a lot, teach it or write about i.e. set up a repository for other people to learn more about it in an easier way.

Above all: Just be you. Don't label or attach yourself with certain identities. Build great things just for the enjoyment of building things. Love the process of building things. Collaborate with friends and colleagues. Go boldly.

Learning, building, etc. is all a joy. Don't try to be the best _____, just build stuff that matters to you.

Having completed graduation in India with a college much less in glamor than VIT, I would advice you to give yourself some slack and continue working earnestly on interesting stuff. When I graduated, I was deep-down with anxiety to get proficient in frameworks like Rails / AngularJs. Apparently, what were web frameworks in my time are AI / Big Data these days the skills insinuated as requisite to be taken seriously.

But things are much simpler than that. Programmers solve problems and even the most revered programmers are just solving other programmers' problems. If you are building stuff, irrespective of size, scale or complexity, you're on the right track. Snub the anxiousness of not studying in the top-tier college; it won't matter few years down the line. I certainly can relate to zealousness of solving complex problems, but in my view, it's certainly not a prerequisite for personal fulfilment, or success, for that matter.

In day-to-day work, I am yet to use anything related to AI but every now and then, I find immensely time-saving project that just solved an insignificant problem.

Look - since you are passionate about solving problems and making things, why don't you just create sources of passive income or build some business from the ground up? This way you will be able to bypass any reputation issues that your university has and focus on your creativity instead.

You're doing great. Don't stop your learning curve fall down. I feel that there are really very very less people like us in our country who have similar likes and views though they share almost same story like ours.I can understand the situation of student like me. I too am sophomore student at an Institute ranking way below yours but i feel it doesn't matter a lot specially in our field. I read so many things over internet like how i can develop myself up and so and so though i start everything i don't do anything good which i can show or prove to the world Trust me bro you can't match my level of procrastination. I haven't done anything except reading things over internet and i don't know why the heck i came here to suggest or advice you. But one thing i would like to tell you: don't let yourself feel down and fuck the negativities around you instead try utilizing and learning as much as you can in forthcoming years. There are hell lot of people who are there to help us out and internet is our best friend. I'm studying really hard to learn things around me and i feel you should do the same and make each second count for your better future. Good luck.

You are already on right track. Just complete the Graduation as it is required by many companies(and visas if you need any in future). Go for fundamental courses more on MIT OCW and others. I also studied in a private engineering college from India(2010-2014). My rant at the time here: https://nainomics.blogspot.in/2011/11/welcome-to-indias-high...

I just focused on my learning. Some professors were encouraging. That helped.

One anecdote: I made a heroku style PaaS for my final year project(like dokku). My professors couldn't understand what it does and why is it even necessary. Their main point was we have "shared-hosting" services to do these(I had to go from php to java/python example then :P). Now after two years they have their industry peers saying docker all over and have called me several times regarding that.

I am now Backend Dev building APIs with Python(Django) and Elixir at a small company. I also have small Open source contributions under my belt. Contact me if you need someone to talk to

I'm in the US; if you're going to stay in India, my advice may be less helpful.

But I would say that you're in an environment where everyone cares greatly about credentials, because that's all anyone has so far. Once you graduate and have worked for a few years, people don't care so much about the credential. It may matter some, but it matters more that you can actually do things.

So you need to get a credential that is good enough to get you a job. But it matters more that you actually know what you're talking about, rather than just being able to repeat what the professor said. You need to understand, not just memorize. You need to be able to write software that actually helps people do things, not just classroom exercises. If you can, then you will surpass many who have better credentials than you. It may take a few years, but you will pass them.

If you are at Vellore (VIT appears to be Vellore Institute of Technology ), there is a world class medical institution in your town (CMC Vellore )that sends many of their graduates around the world to places like the Mayo Clinic and MGH.

They have a well regarded neurophysiology lab that was run by Marcus Devanandan. Perhaps you could do research / collaborate with them.

I can't really speak for anyone else, but speaking as someone who has been involved in interviewing and making hiring decisions, I don't care what school you went to. I care that you graduated, and I care to a slightly lesser extent what your degree is and what your GPA was.

What I really care about when I interview you is how you answer my questions (this doesn't mean that I expect you to be able to answer every question fully), how well I can gauge the depth of your knowledge, and whether or not I think you will listen to senior engineers, learn what you need to do quickly and with an appropriate level of mentorship, and be a team member rather than someone trying to do his/her own thing.

Ok, I'll admit that someone who went to a for-profit school is going to have a higher bar to pass, but I haven't had to worry about that yet.

I've been watching a friend follow their passion (food); what they do, and what I do/think in response. At this point - anything and everything to do with food, my first thought it - What's Veronica's opinion on this?

You want the people you know (and who know you) to have their idea of you intertwined with what you want to be doing; now, everything they encounter that has to do with that will get funneled your way.

First, you need to think about what you want to do after graduation, such as becoming an Android game developer or a graduate student focusing on AI. Then figure out what you need to do to achieve your goals (such as work on projects or do research) and keep working on it. Everything will be fine and you can be at par with the best.

No one really cares where you graduated from. I have worked with developers from IITs, BITS and much smaller colleges. Some of them are smart, some of them are mediocre and some are bad, irrespective of the college they are from.

All that matters is your passion and how much you put into the work you do.

At the risk of sounding cliche', just do work at something you enjoy. If you think there will be valuable knowledge in the degree certificates, go for them. If you have a cool idea you want to explore, go for it.

I think I am in quite a similar position to you: after secondary school here in Ireland, I didn't consider any universities outside of my home town (pretty much because I didn't know a single person who was considering bigger and better options, so it genuinely didn't cross my mind to apply to Stanford, CMU, MIT etc.) so I ended up going to a fairly average and not very well known university to study electronic engineering for my undergrad.

I went on an exchange for a year to UCLA and this was when I started to feel something similar to the sentiment you're expressing here.

I'm now in my 3rd year of undergrad EE and for the last year I've been trying to fast track myself into the AI / ML field as I've been increasingly regretting my EE major and becoming more and more interested and passionate about ML (particularly the intersection of ML, altruism and design): I got Norvig & Russell's textbook and read it in outside of my engineering classes, read less technical books like Nick Bostrom's Superintelligence for motivation / food for thought, made a simple collaborative filtering recommender system using the movielens open source dataset, moved away from the web dev stuff I'd been doing in 1st and 2nd year and tried to hone in on improving my algorithm and pure CS skills, watched a load of AI / ML videos to try and get a better sense of who's who, where's where and what's going on etc. in the field. The "dream" (I use that word loosely) is to do the google brain residency program instead of a PhD, or the U Chicago data science for social good fellowship, so I've been trying to figure out how to get myself into good shape for either of them.

It's been overwhelming at times, largely because I feel like 1) I'm not in the "right" major, 2) I've had a taste of but no longer "go to" UCLA (or an equivalent high ranking university) and won't be graduating from there so will need to work hard to stand out against the competition for placements / fellowships / internships 3) I don't have mentors or peers who can help me navigate the field (I have a great relationship with a lot of my engineering professors but again, it's not ML). So I'm sort of trying to make sense of it all myself. It's reassuring to hear there are others feeling similarly and it's great to hear all that you're doing!

On a positive note, I suspect you may be overestimating the educational superiority of the top tier schools (I know I certainly did before I went to UCLA) but at the same time I don't think it's fair to completely disregard the big unis and just say "circuit theory is circuit theory" and forget about it. While I was there, I really didn't notice all that much of a difference in terms of course content or even teaching quality - the biggest difference was there were an awful lot more high achiever students in my EE classes compared to in my home uni in Ireland, and there was a much more impressive "career fair" and internship opportunity scene than at home (think Irish Cement vs Hyperloop One).

You seem to be doing everything right. I think I was edging down a "burnout" path a couple of months ago with fretting over what you're saying and over my own EE vs CS major "challenge". I've tried to take a step back and remember that there's no one enforcing a particular pace or path for me, hopefully you won't let the fretting get in the way of your passion which almost happened to me.

Just wanted to comment this to warn you about the burnout thing, reassure you somewhat about top schools and throw in a few links you might find interesting for good measure!

You mightn't find any of these links below helpful, you very well may be much more well read than myself but I thought I'd link these here anyway. The first is a reassuring AMA on reddit from the google brain team (particularly the comments where the team talk about all the different backgrounds everyone has at google brain). The second is a list of programmes, fellowships, resources and random AI / ML related pages I've encountered in the last year (amongst a lot of other stuff ). The third is a playlist I made for a friend on interesting AI / ML videos which you most likely will have seen before but you might just enjoy anyway. The quick interviews are cool if you haven't seen them already.

I spent years working in IT before going back to school at night to get a CS degree.

One thing is to just learn the subjects and get as good a grade as possible. Even if a class is subpar, just learn the subject. I had to submit an assignment once about process scheduling in Linux etc. After ten minutes study, I knew I had an A+ on the assignment already. But I had always wanted to look into that topic any how, so I spent several more hours reading about it for myself. I always wanted to learn about scheduling, and if I punted on it then, when would I ever study it? If I did that all the time my skill level would be high.

If you study and get good grades and have a good relationship with professors (go to office hours and schmooze a little, pay attention and participate in class and be prepared and listen), you can always apply for a Masters at IIT or elsewhere. So you can still get that name if you want it.

If the subject is theory of computation and the teacher is sub-par, just go above and beyond. Learn about big-O and the squeeze theorem and pushdown automata for the class, but for yourself as well. Read (some of, all of) a non-assigned book on automata theory if necessary.

Insofar as projects, one thing I suggest is doing projects related to coursework. Toward the end, or right after a class on C++ - write your own C++ program, or fix an issue with a Github hosted C++ program and send a pull request. If it is a graphics class on OpenGL, write your own program in OpenGL towards the end or right after the class - maybe explore iOS/Android OpenGL ES. Or look at scikit-learn after an AI class. Ground some of the theory you learn in class with application.

Your classes covering concurrency and threading and critical sections and mutual exclusion may seem boring in school, but if you're a programmer you will run into these things and you will be happy you learned how to deal with it properly a few years back, even if you haveto go back and read up on it. The AI stuff may sound exciting, but getting all these details right together is what will get you to be a good programmer.

From what you wrote, my main advice is don't be too all over the place. If you have a class in databases and a class in Java, that semester, spend a lot of time learning about the theory, and maybe a little time in application setting up MySQL on your desktop and writing a Java program to populate kt. It's OK to have one other side project going at a time of something that interests you, but you should be spending a lot of time learning about databases and Java.

If you have time on your hands, just dive more into it. For example, in the USA, a drink may be 2.5 liters. In some countries that is 2,5 liters (comma, not period). I once submitted a patch to a Java project doing a switch/case by country. The upstream told me the Java had a DecimalFormat class that already did that. My method was a waste of time, and also less complete. It was something about Java I nad not learned. You're just scratching the surface in class, there's a lot of ground to these subjects.

So get a good grasp of each subject you study. Meanwhile, if you have an interest or specialty you'd like to pursue, do that as well.

As an experiment I posted my side project in subreddits related to what the project's about. I went from ~15 registered users to 45 registered users in a couple of days. Google Analytics showed ~300 new users in 1 day and ~3000k page views within a couple of days.

Just by posting there and using Google Analytics for the most basic metrics, it boosted my site's ranking in google searches which helped. The numbers I got back are tiny, but it's fun to see new users still signing up and adding data to my project.

I've launched multiple side projects since the early 1970s. Nothing in the way of marketing has worked for me, but I think I have finally found an approach that works.

I know it's counter-intuitive, but, trying to find customers is actually a mistake! It's too much work for too little return.

The right approach is to devise a method to find someone who will find customers for you. This might be deeper than it first appears. Consider this example.

My current budding project (call it E) is a tool for students who are having academic problems. Before, I would have tried to convince students that E would help them. Instead, my current approach is to find people whose problem is not to improve their own academic work but to improve the work of others. My value proposition is directed at them not at students. It is their problem I am trying to solve. E solves their problem by giving them something they can offer to students needing help.

Now my effort is to approach academic advisors, tutors, remedial educators, learning disability psychologists, and the like via professional associations and activities. In a sense, these people have become my market NOT the students. They will work for years for free and share their success stories to fellow workers. This sustained compounding effort is the sort that can lead to exponential growth.

Devising a method to find such people can be difficult. Deep thought is needed.

There are a lot of advice out there for this, only that it is always for full-time endeavors, ambitious startups with a team of co-founders and even hire marketers.

These advice can give insights but are rarely directly appliable to side-projects. What you want is a constant, predictable source of people genuinely interested in your project, rather than growth hacking your way to the exponential explosion.

The best way to do it for a side-project is to have access to and trust from an audience.

There are two ways to do it. Write a blog and be part of an online community where your target audience hang out. That is why the advice of having experience at the industry you are focusing is even more a sine qua non than with startups.

Both actions are actually very complementary. Regularly write interesting posts on your blog and create an audience with time. Regularly contribute at HN or subreddits or Twitter or whatever and gain trust.

In both strategies be sure to be useful and deliver value not necessarily related to your side-project. If people sense you are only doing that artificially as pure content marketing, you will lose their trust.And for one-man side-projects, this kind of trust it is even more important than to startups.

I've been building https://www.findlectures.com, and have ~400 people on an email list and a few hundred people a day use the site, primarily from having articles written about the project on TNW / Lifehacker.

Some observations:

* I work directly with a couple end users who really like the project, which gives much better feedback than posting on reddit, etc

* Build features that help more technical users (in my case, facets for programming languages)- people who come from HN / twitter give better feedback, write better tickets, and are more able to tell others if they like the app

* As far as promotion, I've had success with HN comments, guest posts on dev.to, and the startups reddit. All three have exposed the app to people with much larger audiences.

* The email lists Cooper Press manages are good to write for, because they pick up a lot of their content from niche subreddits.

* People who write articles about you rely heavily on material you've posted about yourself / your project (either on your own site, or in comments here).

* Some Simple UI features communicate what your project does better than verbal explanations (e.g. for a search engine, help text that shows example searches for different features)

* Any articles you write you can re-purpose in emails you send out, or vice-versa, so the time you spent doesn't get wasted if one approach doesn't work

* There is a compelling psychological benefit to posting a project on reddit (etc) in comments - every time I do, I think of some minor way I could improve the project. This is a bit like code reviews, where the pressure of showing someone your work makes you do a better job.

* Broadening the scope of what you can do gives you a lot more to talk about publicly. E.g. you might not be an expert in AI, but if you do a couple experiments on a dataset you have, you can participate in all those forum threads.

In my experience, it's really, really tough. To get our first customers we had to send thousands of emails, talk on the phone with dozens of prospective customers (for both customer development and actual selling). There's a reason why SDRs/Lead Gen marketers are full-time positions and it's ambitious to try and replicate a legitimate sales funnel without being able to dedicate time to it.

This isn't something I would have been able to do if I were still employed, which I assume is your situation since you refer to it as "something on the side." For instance, even getting on the phone with people can be tough, since the hours they're more likely to chat with you are the hours you're at work.

I know this isn't something you want to hear. The good news is that I'm sure it depends on the industry - we had zero connections and background in our industry when we started - and I'm sure our experience doesn't reflect _all_ companies. But I admittedly underestimated how much time/effort needed to go into selling a b2b product when I was a comfortably employed developer.

Edit: re-reading your post, I think you might be describing a consumer-facing product. In which case user acquisition is different, but I would say the challenges are the same (having built many consumer-facing side projects in the past).

Its hard to provide actionable advice without knowing more about you. However, in general terms, you focus on developing and audience through a marketing plan that has a clear content strategy.

Your marketing plan might simply be:

Produce content in various formats for $market. Put call to action on content to urge $market to buy/subscribe/whatever. Then post the content in $community.

The content strategy might be something like:

I will focus on $subject. Will produce blog posts, vlogs, podcasts, whatever. The main subject revolves around it. I will do this three times a week for twelve weeks and measure which content got the most attention.

Its hard to say $advice will work for you because there are many variables. Feel free to ping me (email on profile) if you have more questions.

Just should actually do community building from the first second on. The easiest way is to share your idea and getting feedback on it. We developed a product for this. It is called STOMT. For example the game "Empires of the Undergrowth" (not on the market yet) intensively uses STOMT to collect feedback in form of short wishes (you can label them as a page owner). We also have integrations for a lot of platforms so people don't have to leave your product: https://www.stomt.com/empires-of-the-undergrowth

I have side project where we charge 60/month to our customers (mostly small businesses but also individuals).

What we did to build a userbase is to pay a small fee (1,5) to freelancers of our trust who would find possible clients (not random but selected people) and write a personalised message for them that we would send. Whenever someone becomes a client, they get extra money (7).

If you run the numbers, it's just a matter of probability the fact that we make more money from paying them to find people (and knowing that a lot will fail) than from staying with our userbase without growing.

try doing customer development to figure out if your on the right path. There is a short book Running Lean that has a great script template you can start with.

another great book Traction: How Any Startup Can Achieve Explosive Customer Growth co-authored by the founder of Duck Duck Go gives some really great advice on exploring channels through experiments in parallel to your development effort.

I suggest a title change from "How do you develop a userbase for your side projects?" to something like "How have you developed a userbase for your side projects?" or "How did you develop the userbase for your side projects?".

You mention you're self taught -- do you have an undergraduate degree?

The OMSCS FAQ[1] is vague about whether such a degree is required:

> "significant professional or other work experience with supporting recommendations may qualify as an adequate substitute for the appropriate academic credentials, however work experience will not take the place of an undergraduate degree."

For those that need some background in Computer Science (say you have a B.S. in something else but want to learn Comp Sci fundamentals) there's also the programming certificate course: https://engineeringonline.ncsu.edu/PS/CPC.html

I launched my OSS project Plsm (formerly Plasm)[0] and have 27 stars and 14 hex downloads. It is the most successful (in terms of stars and usage) project I've worked on. Show HN helped that as well as /r/elixir

I've been working on https://elyxel.com since last May and launched a private beta this week. The biggest takeaway for me so far is that even if it doesn't get much traction I actually finished a long standing side project before jumping to something else. Plus I got the benefit of learning elixir and Phoenix.

I'm not sure why you wouldn't care about stocks or bonuses, but 200k base salary is entirely possible at Google, Microsoft, Facebook, Amazon, Apple, Oracle, most hedge funds, and so on. 200k per year doesn't even put you in the 1%. 200k per year isn't even an infinite amount of money -- larger house and nicer car and poof it's gone.

Right now software engineers with AI and Deep Learning experience or Big Data experience are in demand and they can easily clear 200k.

Outside of the US a base salary of 200k less common, but still possible for senior software engineer type roles, or more commonly for CTO or Director of Engineering level roles.

There are some industries, probably (hedge funds, as the other comment says). But a lot of variation is regional: you'll get paid way more in Silicon Valley or San Francisco than anywhere else.

The problem is that housing so much expensive there that it's not clear it's actually worth it.

To put it another way, salary isn't the important thing. It's salary minus expenses, adjusted for local cost of living (really just another form of expenses). While maximizing income is good, cutting your expenses is far more useful (and easier) once your income is high enough: https://codewithoutrules.com/2016/08/08/living-below-your-me...

AmaGooFaceSoftApple will pay senior developers in excess of 200k per year.

You can't ignore stocks because they will often cap your base salary and pay the rest in stocks. For example, a VP at one of these may have their annual compensation at $X,XXX,XXX per year but only receive $1XX,XXX in base salary. This is true for developers as well, but the ratio of base to total compensation is skewed more towards base compared to a VP.

Also note that there are some very distinguished engineers at these companies whose role isn't people or business manager who would receive as much as, and sometimes more than, a highly compensated VP.

I know many people that are paid like this, most outside of Silicon Valley even, and the common factor is that they are exceptionally skilled and proven domain experts in their field. The specific field of software is less important.

Obviously market demand does influence the salary, but there are many fields in software development where top skill will command this wage. Generally though, you have to really love what you specialize in to develop the kind of skill and expertise that will earn you this salary, it is not something you do by rote.

Yes, big federal government contractors offer this if you meet the requirements for the job as a base salary, actually have the required work experience and are in the top 25% of the talent pool.

Though, at that level it is extremely competitive, and you will be working on solving some extremely challenging problems that you would never encounter outside the government contracting industry.

You can also work for high end service agencies, or startups, or if you want to make way more then that financial institutions would be a good start. Though note, the pace is very fast in many of those companies and the hours may not be worth the large sums of money you will get paid for putting them in if you cannot handle stress very well.

Make $140k/yr, be happy, and make a side project that brings in passive income. Build it up over 5 years until it makes $200k/yr reliably..now you're doing better than anyone who has to have a real job.

Yes, it is possible. When you are offered $200K base at FB, Apple, google, etc, expect that your bonus and RSU gonna add another $200K a year on top of your base.

Experience is necessary for that base, but not sufficient though. Have you built a good product? Are you a top notch engineer? Can you pass a facebook/google type interview? If yes, you can demand. In the worst case, you can get a fat RSU package, and a fat sign on bonus, even if you are offered $170K base.

Yes. Start broadly, then become broadly competent, then become specifically talented in a particular area. You want a niche that is big enough to be interesting (cassandra, biology machine learning) while not being so large that Universities are churning out thousands of specialists (java, oracle, mysql).

As some have said possibly government contracting, or maybe even the medical fields. There is definitely a lot of money to go around if you know where to look and what you're willing to do for it (I'm speaking legally of course). Government contracting may not be for everyone, it depends on the company and what they do if you'd like it or not. Before I got my current job I saw some companies that made things I had 0 interest being involved in. Bear in mind that you must be a US Citizen to do government contracting in the US. This gives you an advantage over others who don't have this privilege.

The most important aspect of becoming a PHP expert is navigating through a safe path in a land of a million pitfalls.

This means, you should not try to push the language yourself in anyway. Do the most straightforward, traditional things. Use a well tested framework (if you are doing web). Something like Symfony would do. Don't make your own 'deep' abstractions. The language is not strong enough to support them without a million unit tests to go with it.

Then you should have awareness of the most prominent of the Php pitfalls. /r/lolphp is a good resource for that. Go through the posts and read anything with more than a dozen upvotes.

Then, regarding security and other general topics, don't count on the Php community to answer your questions. I mean, don't take your questions to /r/php but /r/askprogramming or some general forums.

Trust only extreamly popular libraries that have in in use for long time. For example, Symfony components.

Two things you might want to take a look into is specifically Dependency Injection and the Composer dependency manager and how autoloading classes based on their fully qualified name (\Vendor\Package\Classname)

Fastest in terms of bootstrapping/dev would probably be using Ionic or Cordova (https://ionicframework.com/) but in my experience it is not super performant (as it is hybrid) and allows for little customization. Learning curve isn't super steep, esp if you already know Angular/Angular 2.

Coding knowledge: html/css/es6/typescript/angular

If you want good performance & a huge support base, React Native is probably the way to go. Learning curve is probably a bit higher than Ionic/Cordova (you will deal with platform specific syntax for components), but its what many top companies (AirBnB, Instagram, FB) use for their mobile apps. It is really performant. You may need to write platform specific code and it may take slightly more time, but I still would prefer this route over the hybrid app route.

Coding knowledge: need to know html/css/es6 & have experience with frontend frameworks. Redux/Flux has a bit of a learning curve.

TL;DR: Try doing tutorials for both, and see which one you prefer. IMO it's probably not as fast to develop for React Native as it is Ionic/Cordova, but its still the far better option. It's worth the effort to go down the React Native route.

It really depends on your life stage. If you're single and plan on staying that way for a couple of years then you can come up with alternative arrangements (i.e. Shared housing, etc) that make those Bay Area salaries actually worth more than the rest of the country. And the commections that you make will be worth it.

If you're older and/or have a family then no freaking way. Adjusted for cost of living the Bay Area salries are lower than many places. Apparently Minneapolis and Atlanta pay Software Engineers the most money if you adjust for cost of living. I just moved away to the Midwest and I kept my salary (the company hiring me considered it a "raise" and they weren't wrong). Adjusted for cost of living I would be making over 250k in the Bay Area (according to Pay Scale's COLA calculator).

I often hear folks from the Bay Area say the rest of the country doesn't pay well, but from conversations I've had with other professionals I have had in my town and a perusal of Glassdoor tells a different story it's not hard to make 140k+ where I live.

Companies in the Midwest and Southeast know they are competing for talent with the Coastal centers and they have started to pony up.

You can't look at absolute dollars. If you make ~120k in the Bay you have to realize that's like making 75k every where else.

Forget about the rent prices. It's really not that big of a deal. Being black is not an issue. I've never had a problem here. There are very few places in the country more diverse and inclusive than the bay area. After all your expenses you will still be making 10-20% more than anywhere else and the job market is on fire. Any decent engineer can come and go to jobs as they please around here. I can't imagine a better place to be.

I moved from the bay to NYC last year and thought that there is enough tech here for it to not hurt my career. I wasn't wrong, but as I decided to make a career change to become an ML engineer, I found that there was noticeably less opportunity here than in the bay. I still found a good job in the end, but there were just so many more interesting jobs back there.

I don't know if it's worthwhile to go to the bay for purely financial reasons, but it definitely still seems like a good place to go for career reasons.

I'm sort of expecting to move back to the bay eventually, I'm just hoping that they get their head out of their ass and build some more housing.

The Bay Area is about the only place I'd relocate to. I'm picky about what teams I'd want to work for, so the only way I'm going to upend my life, sell my house, buy a house (or find a place to rent) is if I know that I won't have to do it again if things don't work out.

I'd throw LA into the mix too, as it has a growing tech scene and a lot of things going for it. Seattle, Austin, and maybe Boulder if you can survive the cold.

After taxes, rent and food, what is the net savings in your bank account today?

Then evaluate your offer and calculate net savings in Bay Area.

For many (especially those currently located in low-paying areas such as Eastern Europe or some Asian countries) the net savings are greater with all things considered, therefore a move makes sense. For others the increase is marginal or non-existent, as high salaries exist elsewhere in the world, so they won't bother.

1. You must reframe the situation as quick as possible. Don't think, 'shit, why me, what happened, am I not good enough?' Such thoughts bring you a vicious cycle. You must treat this situation as the best thing ever happened, you must be happy about it. And I promise you, heck I bet $10,000 that you'll tell us in one year that this lay-off was the best thing ever happened and led you to x, y and z. So, basically it's not reframing or lying to yourselfno, what happened was really the BEST what could have happened (so, I just did the reframing for you). Change is always good and rarely gets triggered by oneself.

2. Reach out to as many people as possible, preferably people outside the company. Most people from the company won't help you and even if they did, they just remind you of the company again, what happened and this brings you again to a bad state and you need to start at zero and reframe again. Just let them go, all of them, really. So, look for prior peers, old friends. Further, write applications or just plain emails to many CEOs and tell them that you are out. You don't have to write that you look for a job. Just get into conversations with as many people as possible. It's more about staying connected and keeping a social context (after you lost the one of the company) than finding the next job.

3. Work on a pet project with a technology you always wanted to work with, get into flow and put it online. This will be the most fun and will give you tons of self-confidence in a very short time.

You should spend 30% of your day on 2 and 70% on 3 and 0% on thinking about the past.

Since you were laid off and didn't quit or were fired, you should head down to the unemployment office so you can start collecting. You don't know how long it will be before you find a new job, and the bills will keep coming in. You may have savings, but there is no need to blow through it when you've been paying into the safety net.

If you are not hard up for money you should immediately look for a nice trip somewhere. Be flexible with location instead of time to get a good price. Take three weeks off. Nice places this time of year might be Cuba, Thailand, Costa Rica, Florida, or Big Sky.

Don't cave to the temptation of making an ass of yourself. You never know when you might run into someone in a future job.

They'll likely make you sign some papers for the 1 month severance. Pay attention. Sometimes there are unsavory clauses, like non-competes, non-disclosure, etc. It would be helpful to know where you are located. If you're in California, for example, you can sign a non-compete without reservation, as they are largely unenforceable.

>any advice from people

Was it a really large layoff? Sometimes, there's opportunity there. Often, some of the key people already smell blood in the water, and are thinking of either jumping ship to a competitor, or even starting up their own competitor. If you know any of the key folks that might b e planning this sort of thing, invite them out to lunch a week or two after the layoff and probe around a bit...you might find a place to land.

Do something with your free time. Shut down Netflix, HBO, Reddit, Hacker News and all such distractions. It doesn't have to be profitable or even remotedly useful, just as long it's something that you know that you should be doing.

I had a similar situation back in 2009. I gave my resignation to my boss on a Friday and he said I should hold off until Monday. Monday came around and they laid off most the the dev staff. Instead of having to work for 2 more weeks I got 6 weeks severance and got to leave that day. I already had a job lined up to start 2 weeks later so I booked a week in Cancun in the interim.

They make you sign a paper that says you resigned, so you can't claim unemployment, but the severance sounds better than unemployment since you were leaving anyway. Negotiate that severance, too...they offered me 4 weeks at first but I asked for 2 more and got it.

As your being made redundant, there's nothing untoward about their reason.

1 month for each year served is fairly normal so again, nothing untoward.

Signing a release is also fairly standard. Under these circumstances I would always recommend showing the release to an employment lawyer. For me, peace of mind is worth a couple of hundred dollars but YMMV.

Also, in the UK at least, there are tax breaks on some of the redundancy package so it's worth looking into.

Otherwise, what you do next depends a lot on what your financial situation is. I was made redundant a number of years ago and it worked out great. I was married and had a child at the time but we had enough money for me not to work for a few months. I had a bit of a break, in hindsight I was quite burned out, then got a job at a startup, refreshed and raring to go.

Obviously, it's not always a positive experience but it's not always negative either.

In 2011, I was "laid off" from my job along with almost everyone else when the scraps of my company was acquired. It wasn't a surprise to anyone that this day was coming, management was completely open with us about the dire situation of the company and most of us stuck around until the bitter end hoping that our options might be worth something (they weren't) or that we would get a severance.

From looking at people's LinkedIn profile, everyone from developers, to managers, to the L1, and L2 tech support staff had better jobs within a month. Once recruiters got a whiff of the company being in trouble, they started contacting people. Don't ignore recruiters. I have 15 recruiting contacts from different companies in my contact list.

I put "laid off" in quotes above because immediately after I was laid off, I did contracting work for one of my company's clients (based on a written agreement they had with the acquiring company). After that contract was over, I spent a day contacting every recruiting company I knew. Three days later, I had a phone screen with a Fortune 10 company, one day after that I had an in person interview. By that evening I had an offer letter. At the time, I was a an experienced developer but a middling .Net developer trying to get into full stack development.

Moral of the story, aggressively reach out to people, recruiters aren't evil, study up on interview prep, and don't be afraid to take chances on going after jobs that you might feel that you are not 100% qualified for. I've conducted about a dozen interviews over the past four years. I don't care if you meet all of the bullet points. I care if you are "smart and gets stuff done." And if you are an aggressive learner.

Looking for a job is a full time job in itself. Start looking immediately, get up early as if you were going to work and keep looking until it's time to "go home".

The release you've signed is pretty normal, nothing to really worry about (Unless they've done anything illegal, in which case you're not obliged to adhere to the release but I don't think that's the case).

If you are in the UK you may qualify for legal advice where you get a lawyer and your employer has to pay for it.

A couple of years back I resigned from a job in the UK and although I was on good terms with the people I worked with the HR department (inevitably) did their best to try and screw me and having a good lawyer on my side made the process fairly painless as they actually did the negotiation with my former employer and I got 3 months salary and various other benefits.

A lot of good advice here. Whenever I was laid off, I tried to send out a minimum of ten new contact emails a day. (Longest layoff, two months. Shortest was 14 days.)

Make sure that you sign up for unemployment compensation immediately--sign up before you need it. If you're in the US, there's (often?) a waiting-week period you won't be compensated for; if you sign up immediately, you can get that out of the way first thing. Good luck!

Hey hey. I was in the same boat last year. Loved the company but there just weren't enough contracts coming through the door to keep me fully employed.

One thing that really helps to keep me sane during tough times is to catalog every teeny tiny expense I've made over the past year. When you know exactly where your money is going, it will help alleviate lots of stress.

Before I did this, I felt a vague sense of panic. After I did it, I realized that I had already earned two times more than what I typically spend in a year. It gave me a sense of calm, knowing that I had plenty of "runway" before having to dip into my investments.

If you have any egregious expenses (I know I did), now is the time to systematically eliminate them. You might be money poor, but you are time rich now. If you treat your life like a business, now is the time to make some big cuts to ensure your longterm survival.

Just last month, I cut my phone bill in half, figured out how to cut food expenses by a few thousand a year, and reversed a bunch of b.s. charges for services I no longer use.

That sucks. Luckily in this environment you have a good chance of actually making "extra money" due to the layoff (severance + new job pay overlap)I echo the suggestion to take some time off and travel if your state's unemployment situation allows it (some states now require you to physically check in to receive unemployment benefits)

I got laid off a year ago. I got severance + unemployment, making more cash then I did at work. Within a month I found a new job making 40% more. This could be a blessing. Treat it as such, and enjoy the paid search for better employment.

1. Incorporate - Create a name and make yourself a company. In the US, do your state incorporation papers (most are on-line) and get a TIN/EIN from the IRS, and open and fund a bank account in the company name. This allows you to do consulting work or even be called back by your former employer as a contractor, and it puts you in the right frame of mind for maintaining accounting and expenses while you are off work.2. Meet people - Get out for networking events in your industry and visit a BNI chapter. Look for professional associations and groups in your area. Make networking your new job, even if you don't think you are good at it. Time to practice! The way to find better job opportunities is to be actively exploring the market. Sitting behind a screen mining the job boards is not a motivating exercise and does not make you visible.3. Keep your schedule - There are work hours, and non-work hours, and don't let your typical work patterns fall out of sync. It's better for your brain and your emotional state.4. Cut your expenses - Your revenues just went to 0, so time to get rid of subscriptions and habits that are costing you money. Cook at home and stop eating out, and make those rare times that you do eat out or grab a coffee be as an expense for your business.5. Get fit - Join a gym, buy some running shoes, get out and restore your body. Fitness sharpens the mind, and a fit and trim individual finds work faster. Sad but true.6. Keep a journal - Dump your thoughts. Capture your ideas. Get that stuff out of your head and make it real. You will find great catharsis in doing so, and some day you will re-read it from a very different perspective.

I'm seventy. It has happened to me three or four times. My own experience and the experience of those I know has been: I always find a substantially better job. It was good for me. I know it HURTS. Boy do I know it hurts! But it will be good for you.

Did the internal re-org involve only you getting terminated? If not it sounds like it's a time to celebrate. You were going to resign later the same day and now you get the same result along with a month of pay. Re-orgs happen and some good staff are let go (Sony even called the staff they let go yesterday 'high caliber' http://www.gamesindustry.biz/articles/2017-01-12-guerrila-ca...).

That said, I like the question, I have never been laid off or terminated, I've resigned from all 4 jobs I've had (employed at the 5th) and so I'm reading other answers to see if there are real issues to be aware of should it happen to me.

Send an email to your peers explaining that although you might not agree with reasons, you understand management needs to do what they think makes sense. And that you enjoyed your time together, wish them success, etc.

Don't disparage your former employer - regardless of how the breakup went. I feel that in retrospect these things are for the better. You didn't want to be there anyway - they just made their move first.

I feel for you. I just recently went through a similar situation. I had never before been laid off. A re-org took place in my business unit, and a few people in my department were laid off including me; the company stated very clearly it was due to re-org and NOT for performance reasons. Further, it happened immediately before the holidays.

I was very lucky in that another division in the same company was having a different re-org. and a few jobs opened up, so I applied for, and got another job. Same company, different business unit. Less than ideal, but I count myself lucky. (Although jobs are posted out there, its extremely rare that companies hire or conduct interviews during the holidays!) But the feeling of having been laid off was quite devastating; again especially since I had never gone through something like that.

I think the advice that others have been offering seems pretty good. While my lay off period was extremely short, I myself woke up every morning - as if at any other regular job - and kept searching/applying for jobs. I think that "routine" helped me deal with the whole thing at least emotionally. I also like some advice throughout the comments here about working on a side project. That could help in several ways:

* Maybe it could turn into a little revenue on the side to supplement unemployment, etc.

* Possibly, it could turn into an opportunity to go into business for yourself. Even if it doesn't make you a millionaire, or is short-lived, its still work. Maybe it might pay bills, and you can feel good about putting it on your resume/linkedIn, etc. (In the state of NJ, you are allowed to collect unemployment and still have a part-time side business [1]...But there are caveats and of course I'll disclaimer that I am not a lawyer. So you'll want to seek out professional legal advice if you're considering this.)

* Even if the side project results in no new business, you will have picked up some new skills, or perhaps improved any existing skills. And, if it involves other people - like a meetup - maybe you can get some future business/opportunity contacts - i.e. networking!

The only other advice I can give you: stay positive, and keep yourself busy so as to avoid getting into a negative groove. Good luck!!!

Last night I was reading a Brazilian article, based on a study, about how (what the author called) "centrality" plays a large part in the success of a neighborhood. "The concept applies to places with high concentration of economic activity, intense circulation of people and a large diversity of services." In short, it seems living where you work makes for a nice neighborhood.

> It's like corporations focus on the quarter. Futurists focus on the century. What group of people focuses on the decade?

Corporations focus on the decade. But the focus on the quarter part is what is made public.

Disclaimers abound: Obviously not all corporations. Some are good, some suck. Some are very public with their long term plans/thoughts, some are very secretive about R&D and their thinking beyond the fiscal year. There are groups within corporations (some with billion dollar budgets) focused on the 5-15 years out period. There are many corporate consulting firms specializing in exactly this 5-15 years out period too.

Right or wrong, this ~10 year secular horizon is also sweet spot where secrecy about it does have value if you want a return on investing in it.

In order to achieve anything non-trivial, you need to aim a step above. You need a direction, a vision that's bigger than what can be achieved in the short/medium term.

My skill as an idealist/thinker/designer is to come up with pure, abstract, and consistent models. I try not to consider reality (the present) in order to keep my models pure. I try not to consider implementation details as this will introduce exceptions and inconsistencies that will weaken the model and dilute the vision. I come up with the what, not the how. Anyone who doesn't strictly adhere to these methods will ultimately produce mediocre and short-sighted models. Sadly, it seems like those people are often the ones whose models are adopted.

We don't really care about living to see those visions become reality. We are selfless and do this out of moral duty. Even if things improve, we will inevitably remain unsatisfied with reality as we discover additional problems. We care about the process, not the result.

The one thing we feel an urge to fix, is your ignorance. There is nothing worse than witnessing people being content with the way things are.

Generally cold fingers are from poor circulation. Living in Colorado where a few months of the year we get very cold weather so I have learned a few tricks about cold hands (from Snowboarding to Programming I've experienced cold hands almost everywhere).

One awesome thing my work did for me was brought in a hand massage specialist who taught me several stretching techniques for the hand that help increase blood flow which in turn helps keep them much warmer.

Check out the the following page [1], it has pictures and descriptions that teach great stretches. Not only is it good for circulation it's good to just do this in general to prevent other common problems that stem from lack of stretching.

side note stretching has been a real game changer for my programming. Not only does it make me feel more energized, the stretching seems to have increased my work ethics by a lot because I feel more energized to be that team player.

If this doesn't help just grab a desk USB hand warmer and that should be able to help when your hands aren't feeling so nice (as mentioned by other users in this).

edit Also wanted to mention after thinking a bit more and the hands, feet, and head are the places you lose the most amount of body heat from. I wear a hat while programming so possibly having one at your desk may also help keep in more heat? Just a thought, doubtful this is the root of the issue for ya though.

Reading through that suggests either you are a normal case and just need to take your fitness seriously (including keeping stress under control) to improve circulation. You could be an abnormal case and need to look at medication - but as you have already seen a doctor I am going to guess that isn't the case.

The heater suggestions seem like good ideas to treat the symptoms while you work on the cause.

Reporting it to your manager is an interesting question. Personally I wouldn't do anything formal, but I work quite closely with my manager so he would informally know, I also don't have to get permission to use any personal equipment at work - which isn't the case for everyone.

But again, I am not a doctor.

It sounds like a PITA of a condition. I hope it is benign and treatable for you.

Perhaps counter-intuitively, I have found that applying more layers to my core rather than to my fingers/hands tends to keep my fingers warmer.

Of course, this only works if blood can circulate heat from your core to your extremities. Try throwing on a vest and, when coding, make sure your elbows are not bent and your writs are not resting on a pad in such a way as to obstruct blood flow.

And of course, you should be careful in your choice of computing hardware and software. Nowadays, hardware and software are optimised to spare energy usage, processors go to sleep or reduce frequency while you're working, etc. All this doesn't produce much heat, in top-notch computing hardware. Instead, choose cheaper, less "green" hardware, some laptop that heats a lot, and run some background tasks (eg. you may compile the linux kernel in a loop, or have some 3D rendering game running in background), so that the processor is used close to 100% full frequency, and produce more heath. Then you can put your fingers on the hot surfaces or on the air vent exits.

I have a milder form of the same phenomenon and find that workman's style fingerless gloves (I use DeWalt Technician Fingerless Gloves[0] and can vouch for them.) are enough to reduce it to a tolerable level. They are thick enough to retain warmth and highly durable but leave the fingertips unimpeded for mousing / typing.

In your circumstance, I'd look into USB-powered heated gloves as an option as well, e.g. [1]. If that alone isn't sufficient, some have removable heating elements that you could probably transfer over to the heavier fingerless gloves mentioned above.

If it's Raynaud's you might want to ask if treatment is appropriate for your case. You're not just getting cold, you have arterial spasms with Raynaud's if I remember correctly, and mayo clinic suggests I do.

Check the lifestyle and home remedy part for some advice, but it sounds like you just need to plan more breaks and relax your extremities more.

So I'd continue to be checked. There is likely a more specific underlying cause that can be treated. Cold is a factor but it seems based on the condition that you could be coding in a volcano and still have this happen

I too have struggled with painfully cold fingers and feet while I code. My hypothesis of what is happening is that when you're resting your arms on the table, you are preventing the free flow of blood in your forearms to your hands. Without warm blood reaching your hands, they get very cold. The same thing applies to your feet as the seat you're sitting in constrains blood flow in your legs.

A good short term solution is to fill a paper cup with hot water and wrap your hands around that. This provides temporary relief but only treats the symptom. The effect wears off quickly.

I have also tried fingerless gloves, but those are completely worthless.

The only real solution is to do some light exercise. Most days after I eat lunch, I will walk around for 30 minutes. This light exercise creates heat in my muscles and thereby heats up my blood. The warm blood can also freely circulate to my hands and feet as nothing is constraining the flow of blood. After about 15 minutes of walking I can feel an internal warmth returning to my hands. The skin is still cold but I know soon enough my hands will be warm again. And the effect lasts the rest of the day.

I have a mild case of this...fingerless gloves and keeping the room warm work for me. Notably the circulation shutting down is a response to your body being cold as much as your hands...is the ac blowing on your body?

The US Army has done some research suggesting you can train away the response by (IIRC) keeping your hands in warm water while cooling your body:

Lots of unhelpful advice in other posts: gloves don't work, because heat is brought to your hands by blood flow. Blood flow is cut off, which is why they are cold in the first place. Exercise doesn't really help, because it elevates your core temperature which your body dissipates by circulating to your limbs... which isn't happening. People won't understand what it's like to be painfully cold in a perfectly normal room.

For immediate fixes: if your skin goes dead white and you lose feeling, immediately do something to warm it up.

Finding a bathroom and running warm water over my hands often fixes it, and certainly feels better - though it can be painful as the numbness wears off. You need an external heat source because your body can't do it on its own.

If your flesh goes blueish-purple, warm it IMMEDIATELY. Extended periods without blood will kill cells and you'll get the equivalent of frostbite and gangrene.

In the long term: It's a spasmodic overreaction to cold, so avoid cold sources. i.e. it can be triggered by air conditioning blowing on you, holding food from the freezer, and so on. I wear a hat into our server room at work for just this reason.

Stress level is related, so exercise may help ... indirectly. I've lost 40 pounds over the past year and a half and walk several miles a day. It has been good for my physical condition and stress, but it doesn't seem to have helped Reynaud's.

It can help to have significantly warm clothing to keep it from triggering; I wear Minus33 undershirts and they help. My wife found a woman who had Reynaud Syndrome who makes her own wool mittens to help, and bought me a pair. (I feel like I have giant fuzzy flippers, but they work.)

I have not tried medication for it; can't tell you if it's worth it.

On the plus side, if you don't like feeling too warm... it may never happen to you again. I felt overheated exactly once this past summer, and my house did not have air conditioning.

A close relative of mine suffers from Lupus and with that she has developed Raynauds. She uses blood circulation medication to help get warm blood flowing in her hands and feet. Open fingered gloves are also great for coding because they aren't as restrictive as full gloves. As many others have suggested, a cup of tea or coffee is wonderful too!

I'm sure if you talk to your manager and explain that you have a legitimate medical concern that they will help reach a solution.

I friend of mine had the same condition, which made winter activities (skiing, snowshoeing, etc.).

She found the rechargeable electric gloves from Columbia to be very useful. Many outdoor equipment/apparel companies are manufacturing similar items now. Perhaps a fingerless pair of gloves would help?

Well, I'm unfamiliar with Raynaud's phenomenon, but from the larger picture you've painted, this doesn't seem to be a temperature issue and quick fixes, while comforting, don't seem to be hitting the core of the issue. I hate to be "that guy" who gets on the gymkata preaching pulpit (and, yes, that's a very old movie reference), but I work in a computer lab and am generally cold, until I work out. Short, quick cardio in the morning (nothing too strenuous) and either more intense cardio with light weight lifting in the afternoon, or heavy weights and light cardio. I know this sounds like the meatheadiest of meathead posts, but it has really helped me out.... also helps me to keep focus a little better and work of a little frustration. Not all of it, but the sharp, acidic edges seem to fade a bit.

I have built a tent for my hands and laptop keyboard that works well for me in cooler rooms.

It sounds like room temperature doesn't impact you you, Filthy_casual, much, so I'm not sure how much this will help you. I am posting mainly for others that may be curious.

I've built these tents out of a number of things, but most commonly it's a t-shirt with 2 coffee mugs on either side to prop it a little. Janky? yes. Effective for me? yes.

I dislike typing with gloves, as my accuracy drops quite a bit. Fingerless gloves don't keep my hands warm. I dislike heating the air in a large room to heat my hands, and I have annoying preference for symmetry on my body that is hard to achieve without two heaters.

>Of course it's less noticeable in the hot days, but in general when I go out for long walks my fingers will feel bloated and red-ish. So far I tried some gloves that I had in my house but even with those my fingers get cold while they are inside the gloves.

Err, maybe I'm missing something, but how about investing in a BETTER pair of gloves?

Doing something with your fingers while walking (keeping them occupied, e.g. with small stretching, etc) will help the blood flow better.

I've suffered called hands, fingers and wrists which in turn has made them sore, right up my forearms. I tried gloves and stuff - part of it might be that my home office is in the basement and I live in a climate that sees -30C.

Anyways, my fix is to get the heart rate up. I jump on the treadmill at an incline and do some push-ups. 10 minutes is all I need. And no, I'm not a fitness freak.

When I first started my shed business and was building my products personally, I worked through two winters in the cold, and to prevent frostbite, I removed my boots, rolled up my pants, and dipped my feet into our hot-tub to restore circulation. (My business was home-based.) By warming them in this manner, the cold didn't bother them for about 4 hours.

I switched from a mouse to a magic trackpad and it really helped. Similarly using an ergonomic keyboard that let my arms be less clenched. YMMV but I think these were particularly helpful to me as I'm fairly tall with large hands.

Really regular workout is the only longterm solution. It's hard to start but be strong and go for team workout classes 3-4 times a week for three months. After you feel the positive changes you won't give up. I'm doing it for three years by now, no cold fingers/feets anymore

> Absurdly enough, the room temperature doesn't have much to do with it, because the air condition is working at full throttle and my room is close to 80-82 Fahrenheit most of the time.

Airconditioning, open windows, or bad isolation can cause an un undesired airflow.

> The doctor told me that it's called Raynaud's phenomenon and that I'll have to figure out ways to deal with it.

Wait, your doctor did not tell you how to deal with this? You're not paying anyone here for medical advice.

For people who work behind a desk for 8 hours a day, 5 days a week I recommend the following:

First of all, regular physical exercise. Its obvious but it has to be stated, and its even more so important if you don't do physical labour.

Second, for office work the following advice (in no particular order: based on own experience, pomodoro techninque, plus local laws concerning this type of work): put an alarm on your smartphone or watch or equivalent device, set it to one hour. Every time the alarm goes off, you take a walk and do some stretches, total of min 3 up to 5 min (more will cause drama with coworkers and/or boss). If someone complains, you tell them that smokers get to smoke in the bosses time (thereby having a walk, good for their blood circulation; smoking itself obviously isn't good for blood circulation and if you do quit ASAP; consult your M.D. for aid) and you need a small walk to keep your blood circulation going. (Of course, you could also try to plan meetings or grabbing a coffee together with your walk & stretch, tho I don't recommend 6+ coffee during 8 hours of work.) During this downtime, you can think of whatever comes up in your mind. It is actually rather likely that more often than not you get inspiration during your downtime, but that is a useful byproduct not the main goal (this is called the diffused mode of thinking). Oh, and if someone laughs at you, know that when you're both elder you're the one who's laughing because you cared about your physical health throughout your working career. I mentioned this is partly based on pomodoro technique. Its a variation on it. If you're self employed, I actually recommend the pomodoro technique itself (ie. traditional pomodoro is 25 minutes of focus, with a 5 min break, and after 2 hours, a longer break (there are variations, worth looking into this further)). But if you're working for a boss or in a team then a small break after 25 minutes of focus is frowned upon. I believe its a productivity loss, but this is the way the status quo of work force generally thinks, sadly. There's some excellent pomodoro apps available for macOS, Android, iOS and surely also for other OSes and platforms. Like I said, alarm apps also work.

Co-author of the OMEMO standard and lead developer of Conversations here. To answer your question one after the other.

> What do we think about this protocol?

It's the first encryption protocol that allowed me to actually use it on a daily basis. I regularly use my desktop client and my mobile client in parallel and switch between them constantly. OMEMO allows me to do that.

> Is it a good idea?

Yes. Compared to OTR the entire stack (that includes the XMPP layer) is properly standardized. This also kinda answers your questions regarding the OTR implementations. OTR had the problem that it couldn't do multiple devices and the behavior regarding multiple devices and when to start and end sessions wasn't defined at all.All OMEMO developers are also in regular contact to coordinate behavior between the apps.

> Why are there three encryption choicesI would really like to get rid of OTR (and we will eventually) but we currently still need it for backwards compatibility with older clients (primarily Pidgin)PGP servers a bit of a different use case. It doesn't provide forward secrecy and authentication but it turn allows for a server-side re-retrievable archive. If you get a new client it can automatically retrieve old messages. (In OMEMO the receiving must exist at the time of writing. It doesn't have to be online but it has to exist and announced the device specific key material)

In reality the choice isn't too much of a problem. You select it once per contact and that's it. It's not like you are getting new contacts every day.

> How is the server support.

The server requirements for OMEMO aren't too bad. However it is recommended that you do pick a modern XMPP server for other reasons (battery-friendliness, reliability). Have a look at this comparison list to see if your server supports all modern extensions: https://gultsch.de/compliance_ranked.html

> How is the support of group chat

Support for group chat exists and works fine once it is setup. However it has some limitations that make setup harder. Everyone has to be in everyone elses contact list. And the group needs to be setup with special parameters. (Conversations automatically sets it up this way, but you couldn't for example create the group with Pidgin and then expect OMEMO to work.)The readme on the Conversations github page explains this in a little more detail: https://github.com/siacs/Conversations/blob/master/README.md...