What Is Scuttlebutt? - <AUTHOR> https://adecentralizedworld.com/2020/03/what-is-scuttlebutt/ <comment><USER2> Related discussion earlier today:

[https://news.ycombinator.com/item?id=22909984](https://news.ycombinator.com/item?id=22909984)

Previous related HN discussions:

[https://news.ycombinator.com/item?id=16877603](https://news.ycombinator.com/item?id=16877603) (2 years ago)

[https://news.ycombinator.com/item?id=16273096](https://news.ycombinator.com/item?id=16273096) (2 years ago)

[https://news.ycombinator.com/item?id=20828356](https://news.ycombinator.com/item?id=20828356) (8 months ago)

[https://news.ycombinator.com/item?id=15890911](https://news.ycombinator.com/item?id=15890911) (2 years ago)

</comment><comment><USER3> -Patchwork-

(Windows, MacOS, Linux)

Standalone, beginner-friendly social view of Scuttlebutt.

Recommended for first-timers.

-Patchbay-

(Windows, MacOS, Linux)

Bleeding-edge, tab-based interface with experimental features.

-Manyverse-

(Android)

Off-grid mobile app, currently in beta.

-Patchfox-

(Firefox Add-on)

A new way to access Scuttlebutt packaged as a Web Extension for Firefox. Needs you to run sbot, or have Patchwork/Patchbay running.

[https://scuttlebutt.nz/get-started/](https://scuttlebutt.nz/get-started/)

<comment><USER4> The is also Oasis, which is web-based and runs whereever nodejs runs. It has ssb-server builtin, so you needn't run sbot/ssb-server yourself.

⌘ [https://github.com/fraction/oasis](https://github.com/fraction/oasis)

Under heavy development, but works well and is easy to use.

</comment></comment><comment><USER5> That was mostly about what it wasn't. This might be a bit more to the point:

* [https://scuttlebutt.nz/about/](https://scuttlebutt.nz/about/)

Added: I found this descriptive article that talks about how it works:

* [https://boingboing.net/2017/04/07/bug-in-tech-for-antipreppe...](https://boingboing.net/2017/04/07/bug-in-tech-for-antipreppers.html)

</comment><comment><USER6> cached version: [https://webcache.googleusercontent.com/search?q=cache:K8ZviV...](https://webcache.googleusercontent.com/search?q=cache:K8ZviVxFPlkJ:https://adecentralizedworld.com/2020/03/what- is-scuttlebutt/+&cd=1&hl=en&ct=clnk&gl=fr)

</comment><comment><USER7> Scuttlebutt is what you use until GnuNet goes stable. Just like Hurd.

<comment><USER8> GnuNet sounds really cool. I've been reading about it. Are there any alpha versions of app implementations? Anything that a user can try at all yet?

<comment><USER9> Gnunet has been in alpha for decades. You can install it from any OS package manager.

<comment><USER8> Any idea why there's no usable app running on top of it yet?

Even in alpha, it should be able to handle basic identity and message sending, right? Secushare still not a working app?

<comment><USER7> CADET, the end-to-end data transfer system for GNUnet, still needs to go through some API changes before seeing a stable release. Building an app on top of it as it stands right now may be wasted effort.

I'm keen to see it go stable.

</comment></comment></comment></comment></comment><comment><USER10> One of the things I find most fascinating about this application and protocol is that information can be exchanged and updated without the Internet over USB[0] and the protocol is designed where it could be implemented to pass information over devices like goTenna.[1]

[0] [https://boingboing.net/2017/04/07/bug-in-tech-for- antipreppe...](https://boingboing.net/2017/04/07/bug-in-tech-for- antipreppers.html) [1] [https://community.gotennamesh.com/t/using-gotenna-for- scuttl...](https://community.gotennamesh.com/t/using-gotenna-for-scuttlebutt- data-exchange/1592/7)

</comment><comment><USER11> OP of the article here. Sorry the server got hugged to death, I launched the site a few weeks ago and wasn't expecting it to end up on the HN front page. It's back up on a better server now (and will be seeded to Scuttlebutt soon).

Happy to answer any questions.

</comment><comment><USER12> The link is down I'm guessing it's not the scuttle butt of the outdoor world. A Scuttle butt is the protective fabric put around a climbing harness when one is canyoneering and will be sliding down and scraping against abrasive material like sandstone.

</comment><comment><USER13> How does it compare to Mastodon or Diaspora?

<comment><USER14> Mastodon and Diaspora are federated softwares, which means there is still a server/client model, but many servers (a more well known example of federated decentralization is smtp).

ssb (common short for secure-scuttlebutt) is fully decentralized, which means that there is no server/client anymore, everyone is a node (like the initial idea of bitcoin).

I'm biased in favor of full decentralization, but here are the main differences I can think of :

* federation tends to lead to centralization again, because everyone use the same server (like gmail for smtp)

* full decentralization makes it easier to build custom software (you have access to the whole data, without being constrained by an api). But this is not true for ssb, because it's harder than it should to build software on top of it.

* it's easier to change software with full decentralization, because you don't have an "account" owned by a given server (think: it's hard to migrate from a mail address to an other)

* onboarding is more difficult with full decentralization, because you have no easy entrypoint like a server is

<comment><USER13> Dose every node need a full copy of data?

</comment></comment></comment><comment><USER15> What happen if I receive message N+1 but not message N (due to gossiping)?

Can I still read message N+1?

<comment><USER16> usually the gossip works in a way that you should receive each feed's messages in order. Essentially, your client will talk to a peer and say "I have everything up to message M from feed F, got news?" and then the peer will go "Oh, I'm caught up to message M!" and then your client will realize that N > M, and ask for the messages [M+1...N] in order.

Of course, there _are_ ways to mess this up if you try really hard. :P

But to answer your question: Yes, you can read it. You won't be able to verify that it is part of an unbroken signature chain, but you _will_ be able to verify that it was signed with the feed's private key.

</comment></comment><comment><USER17> Other than the cryptography, how does Scuttlebutt really differ from UUCP?

</comment><comment><USER18> The blog design is painful to read!

<comment><USER11> How so? What Browser/OS/Resolution?

</comment></comment><comment><USER19> I understand what scuttlebutt does. What I don't understand is why. What kind of information benefits from decentralization? The only answer I can think of is child porn.

<comment><USER20> Anything you don't want to be at the whims of a central service shutting down/changing their policies/...?

Using a system centered around identity and immutable records for illegal things would be quite stupid.

<comment><USER19> I can already host my own blog and have it safe from the whims of a central service.

I'd like to hear more about how this is tied to identify, but the immutability is my main concern with regard to illegal activity. Once your daughters nudes are leaked on scuttlebutt how do you get them taken down?

<comment><USER21> > I can already host my own blog and have it safe from the whims of a central > service.

Depends which central service. You aren't beholden to social media companies at that point, but you still have to:

* play by the rules of your ISP (If you're hosting on your home connection)

* trust that your hosting service won't arbitrarily turf you out

* make sure that your domain is safe from unauthorized transfers, sudden price increases, etc.

If the convenience and ease-of-use of current systems is worth those downsides (And for many, it is!) then fine. But it's not entirely accurate to say that you're safe from any central service.

To your second point, legality shouldn't be the final word. There are lots of governments with laws that are either actively or inadvertently used to silence dissenting opinions, or used to root out various undesirables. "You can do crime easier using it" isn't a great argument IMO.</comment></comment></comment></comment>


Ask HN: Is C/C++ really faster than Python? - <AUTHOR> I have seen many people saying they choose C/C++ over Python during programming challenges because the performance of Python is lesser compared to C/C++. How correct is this fact?
If Python is actually slower compared to C/C++, how much slower is it when we implement the same algorithm in C/C++?
Is it really necessary to use only C/C++ and not Python when solving some questions which involve a lot of computation? <comment><USER2> Yes. It's much faster. The reason C++ is fast is because you have explicit control over allocations and it compiles to native code (among other reasons). There are also a lot of subtle things that you can control in C++ that you can't in python, like memory layout. Memory layout is extremely important for CPU cache, and CPU cache is extremely important for performance. (Reading data from RAM is generally orders of a magnitude slower than reading from an L1 or L2 cache. For some reason this never gets mentioned in university CS courses, but there are a lot of data structures that are "theoretically" fast for certain things but in practice very unfriendly to hardware. For instance, linked lists. Sure insert/delete is O(1), but since linked lists are quite possibly the least cache friendly data structures in existence, you're better off with a vector/array even if you're inserting all the time. I'm not just making this up, you can read talks by people like Bjarne Stroustroup on this topic)

As to whether it matters for the algorithm, it depends on the algorithm. It's almost always going to be much faster in C, but, how fast do you really need it to be? Python is very good at saving programmer time, so if performance is not particularly important, I just wouldn't worry about it.

<comment><USER3> While this is true, and linked lists are somewhere between exotic and obsolete, the presentation by Bjarne Stroustroup had buried in it him saying 'the time to find the element takes so long a vector is always faster'. But, of course if you include a search linked lists are going to be way slower.

Also I wouldn't say that the same algorithm would be faster in C, there is no reason why C++ can't be as fast as C, even idiomatic modern C++.

<comment><USER4> Exotic? Obsolete? Really? Linked lists are used in pretty much all functional programming languages (because head/tail splitting is extremely useful)

<comment><USER2> I should preface this by saying I love functional programming, I think it's a great way to write stable and testable code, it's likely the future, but...

Functional programming is much more popular in academic circles than in industry. I think academics tend to hand wave away practical concerns like cache coherency as "an implementation detail" or as an "exercise for the reader." Big O times are often considered, but rarely do researchers make a career off of "how well does this fit into an X86 L3 cache"

So yes, functional programming tends to depend on linked lists, and that's probably why you don't see it in things like the game industry. This might change in the future, for instance, I could see it being the case where having provably immutable memory could allow processors to manage more memory efficiently, but I don't think you can have a fast language that considers the CPU as an abstract entity; you have to design these things in.

<comment><USER5> Erlang is used quite a bit in the gaming industry (backend stuff for online games) and depends quite strongly on the linked list concept.

<comment><USER3> He is obviously talking about engine programming. For tools and back ends game studios will use whatever.

</comment></comment></comment></comment></comment></comment><comment><USER6> It's basically 100% true. Any program written in python can be translated to an equivalently functioning C++ program which requires fewer expensive operations to run.

The Python VM is doing a fair bit more work per instruction it executes; for example, incrementing an int isn't going to be a simple register add, it's going to involve a pointer dereference, some comparisons and branches, execution of several C functions, and overhead for interpreting the VM bytecode.

That said, if you understand what Python is doing under the hood you can greatly speed up your programs and approach C++ performance in some areas.

That said, I strongly recommend all performance-sensitive code is written in C++ with wrappers to drive it from Python.

<comment><USER7> It's true, you can translate any Python program to C++. When you do this you'll have the benefit of having debugged it and getting the logic correct in a safe language. Just have to make sure all of that translates correctly. It's nicer to develop an algorithm in Python first where your off by one errors will not segfault or worse silently fail.

</comment></comment><comment><USER8> See "The Computer Language Benchmarks Game" at [http://benchmarksgame.alioth.debian.org/](http://benchmarksgame.alioth.debian.org/) for a head-to-head comparison of various small programs as measured across a wide number of language implementations. Do be careful that a "language" has no performance, only implementations of the language. For example, different implementations of Python may differ by an order of magnitude on a given task, as might different C compilers. Java and Javascript used to be considered slow languages, but the effective billions of dollars of R&D improved the implementations.

The overall solution space is complex. For example, development time on Python is about 1/2 that of C++ (the classic paper is [http://page.mi.fu- berlin.de/prechelt/Biblio/jccpprt_computer...](http://page.mi.fu- berlin.de/prechelt/Biblio/jccpprt_computer2000.pdf) \- is there something more recent?). Since algorithms can trump raw performance, it may be that in 8 hours its possible to develop a more sophisticated implementation in Python which outperforms the naive implementation in C++.

In the late 1990s, when people started using Python for traditional supercomputing problems, the phrase was to use Python to "steer" the low-level code written in a faster language. For example, NumPy is a Python API which uses C/ Fortran/ assembly code at lower levels for doing array calculations. Thus, only some people need to be skilled in both levels, while most can focus on writing Python code. The actual code has parts written in multiple languages, and not "only C/C++".

<comment><USER9> Didn't the PyPy folks have some issue with the language shootout, which led them to make their own?[1][2]. IIRC a lot of the Python code wasn't that optimized at all compared to the C/C++ programs.

1\. [http://speed.pypy.org/](http://speed.pypy.org/)

2\. [https://alexgaynor.net/2011/apr/03/my-experience-computer- la...](https://alexgaynor.net/2011/apr/03/my-experience-computer-language- shootout/)

<comment><USER10> [2] The blog post tell's us that Alex Gaynor confirmed "with some CPython core developers" that his program didn't work because of a bug in CPython.

But the blog post doesn't tell us that _Alex Gaynor never said there was any problem with a CPython bug._

Alex Gaynor's blog post tell's us that "It's also not possible to send any messages once your ticket has been marked as closed, meaning to dispute a decision you basically need to pray the maintainer reopens it for some reason."

 _But that 's completely untrue!_ You can send messages when the ticket is marked closed! And you can open topics in the public forum! And you can click on a username and send email in 2 clicks.

There just wouldn't be any story to blog about, if Alex Gaynor admitted that he could easily have told me -- _the bug is in CPython not in my program, so show my program_ \-- but chose to say nothing.

</comment></comment></comment><comment><USER11> Programming languages aren't slower or faster. The implementations of them are.

Provided no FFI or extensions written in other languages, non-I/O bound interpreted CPython is 50-100x slower than C/C++. JIT compiled (PyPy, etc.) Python might be in 2-10x slower bracket.

If extensions written in C/C++ are used, then you might be effectively comparing those extensions against another C/C++ implementation.

So _if_ your code is going to be I/O bound and/or can effectively offload all computation in modules written in C/C++ (like NumPy), then Python might be practically as fast as C/C++.

If you use pure interpreted Python and implement compute limited algorithm in it, your code is going to be 50-100x slower than C/C++.

Real life scenarios are probably somewhere in between those two extreme cases.

<comment><USER2> > Programming languages aren't slower or faster. The implementations of them > are.

People only say this if they haven't implemented a language.

Look at something like PyPy. The work is absolutely brilliant, written by insanely smart people... and it's still vastly slower than C for reasons that are implicit in the language. There are just aspects of the language that are hard to deal with (a lot of hidden allocations on the heap, etc.)

Here's a good talk on the subject: [https://speakerdeck.com/alex/why-python- ruby-and-javascript-...](https://speakerdeck.com/alex/why-python-ruby-and- javascript-are-slow)

<comment><USER12> PyPy is still just a Python VM--it's not compiled, like C is.

You could write a Python compiler, but it would be difficult, and you'd need to sacrifice certain parts of the language (and/or extend it, even).

Take a look at Crystal[1]. Most Ruby code will compile without modification. Sure, some cases where type deduction is not possible (like `[]`), and certain cases of meta programming (like dynamic class creation at run-time), or accidentally calling a method on Nil (which is actually a feature to prevent runtime NPE[2]).

[1]: [http://crystal-lang.org/](http://crystal-lang.org/) [2]: Null Pointer Exception, in case the acronym was ambiguous.

<comment><USER2> Well, there is a python compiler. And the compiled code is fast (although, the compile times are absurdly long). Specifically, RPython is a compiled language, and PyPy is written in RPython. So yeah, it's possible, and it has been done, but on the other hand... RPython is only superficially like Python, the semantics are vastly different. It's technically a subset, but the way you approach writing it is way different. It tends to feel like C with some syntactic sugar. So I don't think that invalidates what I'm saying, I think it actually demonstrates it: if you want efficient code the language needs to make efficiency a priority.

<comment><USER12> I agree, although I wouldn't say efficiency needs to be a priority. The language should simply be aware of the machine model instead of abstract those. It should know there's a processor, and that there's memory. Crystal does a pretty good job at being efficient without sacrificing much!

</comment></comment></comment></comment></comment><comment><USER13> I find Python's speed is _highly_ uneven and dependent on what you are doing with it.

Are you doing something that has some kind of underlying C implementation (file I/O usually)? Then it should be pretty quick.

Are you doing something that is all handled by the Python interpreter? Expect it to be slower than you'd like. e.g. for loops in Python are usually slower than list comprehensions.

It can be kind of frustration to write a bunch of code that runs lightning quick and then suddenly see your runtimes explode when you add a few more fairly trivial lines to complete off some code. I'd almost rather Python had a more consistent performance profile even if it was a bit slower on average than fastest possible, because it would make it easier to reason about the performance of your code.

So far I mainly just use the default Python implementation, but if you're really struggling with it, it's probably worth it to look into using one of the JIT or JVM implementations for more consistent speed profiles.

BTW, there's also all sorts of weird performance tweaks in the community...mostly of the form of syntax A vs. syntax B, and I've found that surprisingly few of them are "real" or offer more than trivial speedups.

In other cases, in other languages, you _know_ what you need to do to speed things up, but Python either doesn't offer that mechanism in the language or buries it under somewhere else (try finding out how to preallocate lots of entries in a dictionary instead of incrementally growing it, it exists, but it's almost impossible to find using search words like "preallocate")

</comment><comment><USER14> If you consider the raw languages, C/C++ is indeed faster. But unfortunately it's not that easy.

It's easier and faster to write a program in python that in C++. So given limited programmer time, it might be possible to write a faster solution in python than in C/C++ because you have more time to optimize your algorithm instead of fighting with the compiler. If you have a big project, you can spend the extra programmer time you gain by using python by moving crucial code from python to C. The crucial code can be found by using a profiler. (Saw an article about this some time ago, but don't remember which company actually did this)

Finally, python has a lot of math libraries that offer good speed for computation intensive operations, see [http://www.scipy.org/](http://www.scipy.org/).

So yes, it's not that easy. I would suggest use Python because it programs easier/faster, and if you really run into a wall, you can always port parts to C.

</comment><comment><USER15> The same code is faster (and easier) to write, correctly, in Python than in either C or C++. (this depends a little on what you're writing, but not much: C/C++ make you specify much more about your code than python does.)

The same code, however, will run faster on C/C++. This is because python is doing some of the work for you, and you did that work upfront when writing the C/C++.

If you are doing something which involves a lot of computation, which all fits in RAM (using numpy in python will make that a fairer test between the two choices), then C/C++ will be faster.

Remember that a good pattern is to write your high-level logic in Python, and write a python implementation of your app, and then profile it to work out the slow parts of the code and speed them up using Cython[1], which will allow you to convert python-like code to efficient C (you can also straight up borrow C/C++ implementations from other people, too). This pattern is designed to balance minimising both programmer-time (since you will only have to code the important bits in C) and run time (since the performance-critical bits can be optimised.)

[1] [http://cython.org/](http://cython.org/)

(for pedants: I am referring to the CPython implementation, which is the only one which supports C/C++ extensions.)

</comment><comment><USER16> Yes , and there is no point to ask questions like is X scripting is faster then c++ . each software that is running by software will be slower then native code .

</comment><comment><USER17> I wish people would stop saying "C/C++" , these are 2 different languages.

Python* itself is written in C, not in Python. Which should give you clues to mediate and find your own answers.

*: Python, the canonical implementation.

<comment><USER18> > Python itself is written in C, not in Python. Which should give you clues to > mediate and find your own answers.

PyPy is written in Python and is much faster than CPython in a lot of cases, so I'm not sure the argument you're making here is valid. [http://speed.pypy.org/](http://speed.pypy.org/)

<comment><USER19> This might be a silly question as I don't know much about compilers or interpreters, but how is that possible? Also, why hasn't the Python community tried to make PyPy the default then?

<comment><USER20> > how is that possible

PyPy is written in a restricted subset of Python called RPython, which gets translated into C

[https://rpython.readthedocs.org/en/latest/faq.html](https://rpython.readthedocs.org/en/latest/faq.html)

</comment></comment></comment></comment><comment><USER21> CPython is built more naively for lots of operations. A global lookup is a dictionary lookup. Getting a symbol out of an object is a dictionary lookup. An object creation is always an allocation; variables don't go on the stack. Everything is reference counted. The old 'range' builtin would create an actual list of that length in memory, rather than just keep track of the start and end points like a C-style for loop.

Other implementations could theoretically do better. PyPy can detect after a while that a variable can safely be declared on the stack, and so it will start to do that. If the object type is known, then a field lookup becomes just adding an offset to the pointer. It can even use different implementations for the same Python-visible classes (to store a range result in constant space, but still appear to be the full list, or use a different type of dictionary for objects and {}, or other things like that).

</comment><comment><USER22> The "Python is the language, not the implementation" answer has already been given by @dalke, so I'll answer whether cPython, the implementation of Python that Python developers commonly use, is slower than C/C++:

cPython is necessarily slower and uses more memory than C for most tasks, and that's because cPython is implemented in C. You couldn't expect a new programming language that was implemented in Python to be faster than Python, either.

This is less of a concern for scientists and others with very tough performance requirements than it otherwise would be, in part, because cPython code can delegate C and C++ code[0]. This means portions of your program that need to be highly optimized can be implemented in C or C++, while the rest of your program can continue to be written in Python.

[0] [https://docs.python.org/3/extending/extending.html](https://docs.python.org/3/extending/extending.html)

<comment><USER23> _> cPython is necessarily slower and uses more memory than C for most tasks, and that's because cPython is implemented in C. You couldn't expect a new programming language that was implemented in Python to be faster than Python, either._

You are probably thinking of purely interpreted languages because for compiled languages this is not true. You could write a compiler for a new statically typed language in Python and that language could be orders of magnitude faster than any Python implementation.

<comment><USER22> Ah, yes. Good point.

</comment></comment></comment><comment><USER24> My perspective having developed with Python for over 20 years now: it depends on the nature and context of the problem being solved.

In my experience, you usually need a CPU intensive problem for the implementation language to be a speed concern. Many practical everyday problems solved with Python (outside of contests and specialized fields) tend to be I/O bound.

Secondly, even when you do have a CPU bound problem, many Python modules you might use to solve it are wrappers for C/C++ implementations.

As a result, I've come to think of Python as a control and integration language and less as a platform for base algorithm implementation.

Viewed that way, I've found Python to be unbeatable for speed of implementation and long-term maintainability (two of my top metrics for valuing code).

</comment><comment><USER25> I implemented an algorithm in Python and C++. Heavily IO bound task, read a float, multiply it with a factor, save to another file. Input file was several Gigabytes. I didn't do any optimization and I'm a C++ noob. Python was 30 times slower.

</comment><comment><USER23> It is generally true. For the same algorithm, C++ can be hundereds of times faster, but sometimes you can push computations down to the C code in which the most popular Python implementation is written.

A very general approach to optimizing Python code is to look at all your loops and ask yourself which ones you can replace with library calls.

[https://wiki.python.org/moin/PythonSpeed/PerformanceTips](https://wiki.python.org/moin/PythonSpeed/PerformanceTips)

</comment><comment><USER26> What would be a good book to start to learn high performance C++ code?

<comment><USER27> The reference manual is Stroustrup's _The C++ Programming Language_ , however it's not a great read for newcomers to the language. If you are new, I would start with university lectures (many esteemed schools teach C++ intro classes) and move onto the Stroustrup book which will get more into the implementations of STL algorithms and data structures. Those implementations will give you a good understanding of which to use when, i.e. high performance.

<comment><USER26> Thanks, will do. And if I want to go even further and also learn about how the code interacts with the hardware on the lowest level? So that I for example know what code will have lots of cache misses?

</comment></comment></comment><comment><USER28> What about PyPy? It generates native (JIT) code and run as fast as C.

<comment><USER2> PyPy is an amazing project, but if you're really writing performance sensitive code then relying on the heuristics of a JIT is a dangerous game. There are also a lot of things that PyPy's JIT just can't realistically optimize.

</comment></comment><comment><USER29> It's generally difficult to say one language is _faster_ than another, but there are some significant differences between the languages and implementations of Python and C/C++ that have very real performance implications.

Python is a dynamically typed language. This means that the language will handle conversions between types depending on the context. For example, one context can yield a 64 bit integer, another a arbitrary precision integer, another a string. Keeping track of when to use one versus another, and converting between costs performance. The different data representations for each type have different performance implications as well. For example, a 64 bit integer can fit into a register, and it's generally only one cycle to perform any math on it. Arbitrary precision requires math and carry be performed for every digit in the value. With C++, types are explicit, which means there is only one type for a value, and the representation is generally the most efficient (eg 64 bit integer).

Python is also generally interpreted. This means that code can't be directly executed on the CPU. An intermediate layer, called the interpreter takes an intermediate representation of the Python code, and translates it into instructions that run on the CPU. This happens at runtime, which adds overhead for each intermediate instruction. The more instructions you need to do something, the more overhead you have. C/C++ is compiled directly into code that executes on the CPU which is typically faster. This also allows for higher levels of optimization in code, since there's an understanding of what a piece of C/C++ code will look like when it executes on the CPU. The compiler can also optimize the code further, since it knows the code (generally) won't change. It's also a lot easier to use native features of the CPU like stack allocation, which is drastically faster than heap allocation.

One of the other differences is that Python tends to provide higher levels of abstraction than C/C++ code. So, doing something like a set intersection using _x.intersection(y)_ may not necessarily be the fastest way. Python may do a hashed compare, but sorting and using _memcmp_ may be faster. It's a lot more code to write though. This is generally the tradeoff for Python vs. C/C++ (natively compiled code) in general.

If you're concerned with performance, but you like programming in Python, you may want to check out Haskell. It's provides a lot of the same higher level abstractions Python provides, but the language is strongly typed and it can be compiled to native code. A simple example... [http://uxcn.blogspot.com/2011/11/algorithm- complexity.html](http://uxcn.blogspot.com/2011/11/algorithm-complexity.html).

<comment><USER30> > One of the other differences is that Python tends to provide higher levels > of abstraction than C/C++ code. So, doing something like a set intersection > using x.intersection(y) may not necessarily be the fastest way.

C++ provides `set_intersection` as well: [http://en.cppreference.com/w/cpp/algorithm/set_intersection](http://en.cppreference.com/w/cpp/algorithm/set_intersection)

<comment><USER29> And the algorithm version may or may not actually be faster than Python. Essentially, the more abstract and generic things are (like Python), the more you can use them to easily do complex things arcoss different domains quickly. However, the actual concrete implementation is ultimately what matters as far as performance.

So, for example, Python may have a better algorithm, but C++ may use the hardware more efficiently.

<comment><USER30> > Essentially, the more abstract and generic things are (like Python)

And in C++, it provides the same high-level expressiveness as in Python.

> the more you can use them to easily do complex things arcoss different > domains quickly.

But the advantage of C++ is that those abstractions have almost no overhead.

> So, for example, Python may have a better algorithm

Actually, C++ has a complexity guarantee for all of its algorithms.

> but C++ may use the hardware more efficiently.

Well, the brilliance of what Stepanov did was to build general purpose algorithms with out taking away random access capabilities which is beneficial for hardware efficiency(even more so now with modern cpus).

</comment></comment></comment></comment><comment><USER31> Yes. Does it matter? It depends.

If you're writing a game in python, you're going to have a bad time. Yes, I know CCP does it, but from what I've heard their engine is C++, and even then it's been a long, uphill battle. You're just going to have a very hard time meeting soft-realtime performance constraints (e.g. 30ms or 15ms frames) if very much of your code is in python.

If you're doing a programming challenge, you'll probably be fine? I've never done a programming challenge, but my assumption is that getting a result is the goal, and the performance of the code that gets it isn't that big of a deal, so long as it runs in a reasonable amount of time.

Really, the point is that you aren't going to see algorithmic-level speed differences between C/C++ and python most of the time. There are cases where this is untrue (e.g. where the algorithm relies on low level memory control), but it's true enough. You'll see a constant factor speedup, ranging somewhere between small and massive. I've heard 100x is typical for code that runs mostly in python and isn't just calling out to C, C++, or Fortran.

That said, the 100x number could be way off. For compute intensive tasks, if you're using numpy, you'll see a much smaller speedup. If you're not using numpy, but are great at writing multicore and simd code, you could see a 100 _(num_vector_lanes)_ (num_cores), so on a recent quad-core intel chip, you might be able to get a 100 _8_ 4 = 3200x speedup. This would take a long time to write, only applies to problems that are both compute-bound and easily parallelizable, and could be overly optimistic, but you get the idea (I don't know where the 100x number comes from, and how well the C++ programs it was compared with were written -- if it's from Alioth, last I checked they tended to leave a lot of perf on the table, but are not too bad).

Also, cache friendliness can make a massive difference. I've seen 10x speedups in C++ programs by utilizing the cache better, and I've heard of people getting even more significant speedups. Python's implementation is extremely cache unfriendly, _but_ writing cache friendly C++ programs is non-obvious to a lot of programmers (or they don't consider it, or something), so you might loose out here. Along these lines, if your memory allocation patterns in C++ are naive, your code won't perform very well, and a lot of C++ programmers fall victim to this.

So who knows. If you're great at C/C++, know your architecture, are excellent at parallization and SIMD, and have the right problem, the difference could be massive. Barring that, I'd guess you'd get something like a 10x-50x speed up for average code, which is a lot, but maybe not that significant

Sort of rambled there, hope that made sense.

P.S. A lot of this is only true for CPython. I hear PyPy is faster (still no simd, multicore, or memory allocation or layout control though, so I suspect you can still beat it a lot of the time).

</comment><comment><USER32> If we load entire data into memory the difference is negligible.

<comment><USER33> This is actually likely to be the scenario in which the differences are most visible. If your data fits in memory then you're more likely to be compute- bound, at which point C or C++ will completely flatten Python.

If your data is too big to fit into memory, then you're likely to be I/O bound, at which point the cost of I/O operations is likely to erase performance differences between the languages.</comment></comment>


Ask HN: What about an online library of e-books? - <AUTHOR> I was wondering if such a library will be desirable. There is a lot of piracy in ebooks. But what if there was a library with a fixed number of digital copies (with DRM) and anybody could checkout a copy while they are free. The app could also put adds in the book and send the proceeds directly to the authors (might add up to more than the royalty?). And one could imagine discussion thread and cross references anchored to specific parts of the book making it both more informative and more searchable. So what do you think? Is this something that could work? <comment><USER2> Please don't add more DRM, more ads, and more artificial scarcity to the world.

</comment><comment><USER3> This already sort of exists. Check out Overdrive.

<comment><AUTHOR> I see. This is awesome!

<comment><USER3> Yeah! That said, Overdrive has its pain points and could do with some savvy competition. I imagine that licensing and marketing would be the biggest hurdles.

</comment></comment></comment><comment><USER4> In Germany we have the "Onleihe" and its an online Library for e-book. It existing for nearly 10 Years ithink... [http://www.onleihe.net/](http://www.onleihe.net/) its german so heres a translated link [https://translate.google.de/translate?hl=de&sl=de&tl=en&u=ht...](https://translate.google.de/translate?hl=de&sl=de&tl=en&u=http%3A%2F%2Fwww.onleihe.net%2F)</comment>


Microsoft has failed - <AUTHOR> http://semiaccurate.com/2012/11/14/microsoft-has-failed/

<comment><USER2> This is an article similar to the "Microsoft has missed the Internet Boat" articles announcing MS is a dead-man-walking since they were caught behind in the Internet boom of the mid-late 90's. Then they dominated the market and won.

</comment><comment><USER3> Given that my only MS product is a XBox 360, I think this guy is the equivalent to the "World is Ending" guys you see on the street.

</comment><comment><USER4> A little dramatic. No mention of how, once in desktop mode, Windows 8 acts almost exactly like Windows 7?</comment>


Magnitude 7.4 earthquake strikes near Christchurch, New Zealand – reports - <AUTHOR> https://www.rt.com/news/366772-zealand-quake-damage-threat/ <comment><AUTHOR> Local website[0] for tracking the magnitude and location of the quakes has it as a 7.5.

Unfortunately it's still the middle of the night there, so the full extent of the damage won't be known until morning. In contrast with the earthquake in 2011, this quake appears to have had a longer duration, and more of a "roll" to it. The 2011 earthquake in Christchurch was fairly short with a violent shake to it.

Judging from Buoy data[1] and recent reports, a Tsunami is very likely.

[0] [http://www.geonet.org.nz/quakes/felt/moderate](http://www.geonet.org.nz/quakes/felt/moderate) [1] [http://www.ndbc.noaa.gov/](http://www.ndbc.noaa.gov/)

</comment><comment><AUTHOR> (can someone change the link? the stuff website is probably a better choice, [http://www.stuff.co.nz/national/86416304/live-north- canterbu...](http://www.stuff.co.nz/national/86416304/live-north-canterbury- quake) )</comment>


CLI curses based monitoring tools - <AUTHOR> https://github.com/nicolargo/glances <comment><USER2> Quibble: A curses based application uses a TUI, not a CLI. <https://en.wikipedia.org/wiki/Text-based_user_interface>

</comment><comment><USER3> this looks sweet. please, if the dev is reading this, make it installable with distribute/easy_install and register it on pypi (<http://pypi.python.org/pypi>). it's easy to do (see [http://docs.python.org/distutils/introduction.html#a-simple-...](http://docs.python.org/distutils/introduction.html#a-simple- example)) and makes everyone's lives simpler...

</comment><comment><USER4> I looked into HTOP a long time ago and noticed that it used quite a bit of resources. How does glances perform?

</comment><comment><USER5> I was thinking of writing something like this literally just yesterday. I look forward to contributing.

</comment><comment><USER6> If you're into manual monitoring like this, check out <https://github.com/hcooper/sarplot>

Its only dependency (beyond enabling sar) is gnuplot.

</comment><comment><USER7> Any way to compile libstatgrab (a dependency) on OS X? It isn't on the list of supported systems, I know, but maybe someone tried already?

</comment><comment><USER8> Why not use 'htop'?

<comment><USER9> Looks like this utility provides some information that htop does not provide (net i/o). While htop shows you the full process list, glances by default just shows you the most intensive processes on your system (by default). I don't view this as a replacement for htop, but rather a supplement to it.

</comment></comment><comment><USER10> Parse error. Suggested title correction: CLI curses-based monitoring tools</comment>


Americans Under 35 Are Unable to Buy a House, Pay Debt, or Save for Retirement - <AUTHOR> https://www.forbes.com/sites/camilomaldonado/2019/10/31/americans-under-35-unable-buy-house-pay-debt-or-save/#7e0d684a19ac <comment><USER2> I don't think it's very different from Canada, depending on the city.</comment>


3D printer made of Legos that prints with Legos - <AUTHOR> http://blog.makerbot.com/2010/10/18/mindblown-a-lego-printing-makerbot-meet-makerlegobot/

<comment><AUTHOR> Cool, now they just need to miniaturize it 10^9-fold and we'll have our molecular nanotech.

</comment><comment><USER2> What would be cool is if the 3D printer made of legos could print another 3D printer made of legos. Turtles (er, legos) all the way down!</comment>


Getting and Installing Free SSL Certificate on Your Site - <AUTHOR> https://www.techcartnow.com/getting-installing-free-ssl-certificate-on-your-site-moving-wordpress-site-to-https-using-lets-encrypts-free-ssl-certificate/ <comment><USER2> The validity is only for 3 months.</comment>


Ask HN: must follow entrepreneurs on Twitter? - <AUTHOR>

Please submit Twitter handles - name . <comment><USER2> A couple of existing such lists:

[http://www.quora.com/Who-are-the-best-entrepreneurs-to- follo...](http://www.quora.com/Who-are-the-best-entrepreneurs-to-follow-on- Twitter)

[http://www.quora.com/Who-are-the-top-entrepreneurs-to- follow...](http://www.quora.com/Who-are-the-top-entrepreneurs-to-follow-on- Twitter)?

<comment><AUTHOR> Thanks this list if useful

</comment></comment><comment><USER3> I made this page a while back using Robert Scoble's list

[http://www.readevery.com/best?q=500_tech_entrepreneurs_to_fo...](http://www.readevery.com/best?q=500_tech_entrepreneurs_to_follow_by_Robert_Scoble)

</comment><comment><AUTHOR> @paulg -- Paul Graham @</comment>


Ask HN: A service to send highly-voted HN submissions to email - <AUTHOR>

Is there a service to filter Hacker News submissions by vote count (set by end user, for example 100) and send links to these submissions and comment threads to end user's email in the form of digest, on daily basis?<p>It would be great if I could also specify desirable keywords (to lower the barrier) and undesirable keywords (to raise the barrier). <comment><USER2> @newsyc50 and @newsyc100 on twitter do something similar, although not in digest. You can also just run a cron job to fetch <http://news.ycombinator.com/over?points=100></comment>


The Incorrect Assumption Behind Sweden's Covid-19 Strategy - <AUTHOR> http://www.openias.org/swedens-covid19-strategy <comment><USER2> The results seem pretty good so far:

[https://ourworldindata.org/grapher/new-covid-deaths-per- mill...](https://ourworldindata.org/grapher/new-covid-deaths-per- million?tab=chart&country=SWE+FRA+ITA+ESP+GBR+BEL)</comment>


Classic Bug Reports (2015) - <AUTHOR> https://blog.regehr.org/archives/1270 <comment><USER2> Discussed at the time: [https://news.ycombinator.com/item?id=10309401](https://news.ycombinator.com/item?id=10309401)

</comment><comment><USER3> I made a similar site that is a curated list of absurd software bugs called [https://500mile.email](https://500mile.email)

I love reading stories like this, so I'm open to more suggestions!</comment>


My Challenge: From Service Business to Product Business in 1 Year - <AUTHOR> http://blog.eerlings.com/index.php/2013/02/20/my-challenge-from-service-business-to-product-business-in-1-year/

<comment><USER2> Why are there so many posts about people selling ebooks? Is there truly an enormous market for these ebooks? Do Klout scores go up with ebooks?

Should I be writing an ebook?

<comment><AUTHOR> This post is not about ebooks, but yes i believe strongly in ebooks: they are products, relatively easy to make, and high margins

</comment></comment><comment><AUTHOR> I'm looking for people that did the same: convert their service business into a product business. Anyone?

<comment><USER3> I did it, well sort of.

My wife and I own a digital agency (deerdigital.com). We found a pain within the agency, built a product around it, and 6 months later we have a new start- up that has a few hundred paying customers and is growing about 7% week on week (gathercontent.com).

We decided to continue with the service business by giving more responsibility to employees, and having one of them buy in and becoming the CEO. We're no longer involved in the day-to-day ops and meet once or twice a year for high- level strategy planning. Best decision ever.

<comment><AUTHOR> James, great! Those are stories I'm looking for. I'd like to blog post about your story on my blog (<http://blog.eerlings.com/>), would you mind an email interview?</comment></comment></comment>


Ask HN: I'm selling some stock from a startup and don't know what to do with 50k - <AUTHOR>

The stock has been trading for a pretty fair price recently and I decided to sell half to hedge against whatever the future brings. I don't really need the money. I eventually want to bootstrap a startup, so I don't want to lock up money in something longterm like a house, but I also don't want to lose money in bad investments. I don't really want to actively manage it either, I don't find that stuff too interesting, so a funds or money managers sound good to me. I just don't where to start. Anyone have any advice? <comment><USER2> Buy a low-expense index fund, like Vanguard or Fidelity. Or Apple stock. [MHO, YMMV, I am not an investment advisor]</comment>


Dropbox scores patent for peer to peer file syncing - <AUTHOR> https://torrentfreak.com/dropbox-scores-patent-for-peer-to-peer-syncing-160103/ <comment><AUTHOR> AeroFS ([https://www.aerofs.com/](https://www.aerofs.com/)) is built on peer- to-peer file syncing technology as well. Sad to see no mention about AeroFS on this post :(</comment>


New Site, Who Dis? - <AUTHOR> https://httpster.io/article/2020-06-07-new-site-who-dis/ <comment><AUTHOR> Inspired by the previous discussions [1][2] I finally decided to dedicate myself to actually set up a personal home for my projects that's not just a portfolio used in job searching.

The recent thread [3] about about "the small web" was especially inspirational for me, as some of the projects shown there returned the awe and wonder I used to associate with discovering what the internet is about.

Usually I've abandoned website projects as soon as I hit an ankle-high wall as I don't feel confident in my skills nor my interest as a human. The previous HN discussions helped me change my perspective on the value of permanency, dedication and general prolificness.

RSS is not dead, 2020 will be the year of (my) blogs!

[1]([https://news.ycombinator.com/item?id=23237559](https://news.ycombinator.com/item?id=23237559))

[2]([https://news.ycombinator.com/item?id=23205588](https://news.ycombinator.com/item?id=23205588))

[3]([https://news.ycombinator.com/item?id=23326329](https://news.ycombinator.com/item?id=23326329))</comment>


The general economic importance of banks has been highly exaggerated - <AUTHOR> http://www.nytimes.com/2008/10/10/opinion/10mulligan.html?ref=opinion&pagewanted=all <comment><USER2> "And second, the economy doesn't really need saving. It's stronger than we think."

The first step is admitting there's a problem.

</comment><comment><USER3> I read this article, and two days ago listened to this podcast from 'this american life' on npr. This article's arguments doesn't stand up against the pretty convincing descriptions of what's actually going on from the corporate treasurers and banking industry folk interviewed in the podcast. You should make an hour and listen to it--it's fantastic.

[http://www.thisamericanlife.org/Radio_Episode.aspx?episode=3...](http://www.thisamericanlife.org/Radio_Episode.aspx?episode=365)

<comment><USER4> If you liked that, you'll love Planet Money - a daily podcast created by the people that made the This American Life money program.

<http://www.npr.org/blogs/money/>

[http://www.npr.org/rss/podcast/podcast_detail.php?siteId=944...](http://www.npr.org/rss/podcast/podcast_detail.php?siteId=94411890)

</comment></comment><comment><USER5> To argue the opposite:

The author suggests that other institutions (pensions, universities, etc.) bring investors together with savers. It's true, but not to the same extent. Banks are primary. Drying up a majority of the way that it happens will have a drastic effect despite the fact that other ways exist.

The author argues that corporations get 25% of their investment funds from their own profits and that could go to 75% if they stopped paying dividends. The problem is that still leaves a 25% gap there which is sizable. Not only that, but profits don't help firms who are just starting up.

I'm not all doom and gloom about the economy (even today), but I don't think the importance of banks is understated. The author is essentially arguing that if we scraped the bottom of the barrel, we could probably replicate what banks do (bringing investors and savers together) to a certain percentage. That's true, but what if your work just started paying you 50%. It might be hard to meet your next month's bills.

<comment><USER6> I haven't read the article, but a counter-point:

Banks are much less important today than they used to be because there are so many more investment channels available. While regulation limits participation in these channels to the rich and well-lawyered, our economy is more redundant and diverse today than it has ever been.

<comment><USER7> _there are so many more investment channels available_

This is exactly why banks spend significant more money on advertising (think WaMu pre-death) than they used to. It's also why they derive a higher percentage of revenue from fees.

</comment></comment></comment><comment><USER8> International trade is dependent on Letters of Credit issued by banks: [http://www.nakedcapitalism.com/2008/10/international- trade-s...](http://www.nakedcapitalism.com/2008/10/international-trade- seizing-up-due-to.html)

The shit will really hit the fan when your lights go out because your local power utility cannot get a shipment of fuel oil when no bank will guarantee their credit.

</comment><comment><USER9> "Although banks perform an essential economic function — bringing together investors and savers — they are not the only institutions that can do this. Pension funds, university endowments, venture capitalists and corporations all bring money to new investment projects without banks playing any essential role."

Ummm... Pension funds invest in the stock market and they depend on banks to help themselves out. Same for univ. endowments and venture capitalists. Corporations still use banks to manage their cash flow and guess how they and everybody else flows their cash through? Banks!!!

If anything, the importance of banks has been highly understated.

PS. This does not imply the necessity of the bailout. The bailout is ultimately unnecessary. Wamu was still solvent from a cash flow perspective when the FDIC took over and even if some large institutions fail (as some already have), there are more than just three or four banks.</comment>


Do Programming Language Skills Exist? - <AUTHOR> http://hundredminutehack.blogspot.com/2011/08/do-programming-language-skills-exist.html

<comment><USER2> Language fluency, on the other hand, does exist and is very valuable. It shouldn't be a prerequisite for a full-time hire, but not everything about a platform can be inferred from first principles. Understanding the idioms and pitfalls of your tools comes from practice and experience.

</comment><comment><USER3> You are absolutely right. For my current client I had to pick up C# very quick. Before that I had only created a couple of "toy programs" to play with the language. But I already knew a lot of the concepts behind C#: Inheritance, delegates, properties, lamda expressions, ... so learning the new language was really easy and I completed the first programming tasks within the first week.

Unfortunately some recruiting agents only do simple pattern matching and they won't forward you CV to a client when you do not have $language_name skills :(

<comment><USER4> I noticed this, too, about recruiting agencies. Funny thing was when they were looking for 10 years of experience in C# before it was 6 years old.

I have heard a small legitimate argument for strong familiarity with specific tools: although you may know how to program very well, you may not be familiar with C# libraries, and that can mean implementing code already available in a canonical way.

But meh.

</comment></comment><comment><USER5> Word. Agree completely with your comments georgie. Although there are high level abstract programming ideas that are beyond any particular language, the only true way to learn about them in any practical/actionable sense is to program in a language that can express those ideas.

It's very hard to understand recursion or closures without expressing them out through a language. I don't remember who said it 'but programming is understanding.' Likewise how do I know you understand object oriented programming unless you can program idiomatically in an object oriented language like Smalltalk, Self, or Ruby?

Or how do I know you can program functionally unless you can program idiomatically in a functional language like Scheme, Haskell, or Erlang and not in some hackish, crude way but idiomatically? But in order to program idiomatically and elegantly in the respective languages requires learning libraries, learn the constraints of the language, its quirks, its opinions,etc.

</comment><comment><USER6> The author's list of "skills" are programming paradigms. You can't be skilled at a paradigm, only within it.

<comment><USER7> Hmm.... "I am skilled at object-oriented programming." Seems grammatically correct, everybody knows what I mean, there's no particular ambiguity in it... compare with "I am skilled within object-oriented programming." which as a native speaker I find clearly wrong. What exactly are you saying?

<comment><USER6> I'm starting to split hairs here, but I'd say the skill lies mostly in the action of programming, and not in the methodological use of object- orientation. That is, you are a skilled programmer within that paradigm.

</comment></comment></comment><comment><USER8> Nobody but recruiters care about "Programming Languages Skills"

And if that's the case, at the beginning of the year I thought I could get a PHP job, but I didn't have that skill, in fact, it served me to remind me how much I hate PHP.

My "programming skills test" was to create an auth system for PHP, stuff are pretty broken in that language IMHO, I just couldn't during the time frame they gave me even though I do understand all (and a lot more) concepts behind PHP. I got confused with simple stuff like "chaining methods" something I just take for granted in other languages simple didn't work.

</comment><comment><USER9> I think people need to understand core concepts of the field, but honestly, you will do fine in most jobs if you don't use certain concepts, ever.

Say, decorators. Or metaclasses. Lots of those are hairy little edge features of a language (where some are quite useful features you should be teaching to new people in your shop if they don't know them already).

</comment><comment><USER10> After several years, I find that programming languages are so similar that I can pick up the language aspect (syntax) of a new programming language in minutes, maybe hours, but spend time weeks learning the library. So I agree with the author.

</comment><comment><USER11> _Does knowledge of standard libraries on a language platform count? Not really. It means you're good at learning libraries. It says nothing about your programming skills._

I strongly disagree with this bit. What are programming skills if not the ability to effectively get things done? How is domain knowledge _not_ , therefore, directly tied to programming skills?

I agree with what I think your broader point is, that classes of knowledge (e.g. imperative vs. functional) are more important to note than, for example, particular languages. However, when it comes down to it, deep knowledge of the platform is the difference between clean code that's working quickly and spaghetti messes that take forever. I say this as someone who has written plenty of spaghetti. ;-)

<comment><USER12> I think both points being made here are correct.

It's true that having knowledge of libraries is valuable, because as you say, how will you get anything done otherwise?

However, there's a certain type of learning that only occurs once, typically when you're first learning to program.

For example: you need to download data from a web page and parse it. If you're a total newbie, you first need to understand that there's a protocol (HTTP) involved, and that libraries exist to parse the markup language (HTML).

Just knowing that those libraries should be available in your language (standard or otherwise - another piece of knowledge) is valuable. But once you've done it once in one language, you'll know the approach for all other languages.

Another way to put it is that it's all important, depending on which problems you're trying to solve. But putting all your eggs in one basket is problematic and does not necessarily guarantee programming skill.

<comment><USER13> Yes. But you can't separate standard libraries from the language itself so cleanly.

For example, control structures like `for' and `while' are clearly part of the language in C. But in Haskell they are part of the standard library.</comment></comment></comment>


How Yahoo lost its way - <AUTHOR> http://www.mercurynews.com/ci_8592114

<comment><USER2> Why did Yahoo management decide not to own a search engine? I mean that is their core business.

<comment><USER3> They didn't think it was their core business in 1998.</comment></comment>


Y Combinator partners tell MIT students to steer clear of big-name companies - <AUTHOR> http://tech.mit.edu/V135/N7/startup.html <comment><USER3> Perhaps I am wrong, but this seems like horrible advice. For example, while working for a big co, you could come across a problem that you want to solve with a startup. If you are a kid just out of college, you probably don't have enough experience to work on anything but a consumer facing startup - <USER2> those have very low odds of success, despite a few big unicorns we all know about

<comment><USER4> I don't think you can make a blanket statement about it, but there is a good reason to work for a small company or startup: you get to write more of the stack.

At large companies, you often end up working on a tiny piece of a module, and then you work you way up. You don't learn much that way.

There are companies that try to give you more control, but no one is going to throw you into the deep end at those companies. That's exactly what you need if you want to turn a bunch of academic training into practical experience.

<comment><USER5> I've worked in both. They're different skillsets, and they will both serve you well.

At a big company, you write a tiny piece of software that has to fit a number of constraints that have evolved over years. Things like "This has to work in Chinese" and "This has to work in Arabic" and "This can't be O(N^2), you'll burn a million dollars in CPUs" and "This will crash the whole server if something goes wrong" and "This is a race condition. You're going to have a helluva time debugging that" and "Nobody else will be able to read this in a month". It can take you _years_ of trial and error to amass that experience on your own, or you may never if (as is likely) your startup never takes off. If, ten years into your career, all you know how to do is cobble open-source programs together, you have a big problem on your hands.

At a startup, you get to build the whole stack yourself. You face problems like "What database should I use to store this data? How can I measure and improve its performance? What's the best front-end technology to deliver the data to the client? How do I setup my build?" So you learn how to, very quickly, get _something_ up and running from nothing. If, ten years into your career, all you know how to do is make little tweaks to already-existing programs, you have a big problem on your hands.

You really need both, but I would recommend doing the big company first. (Disclaimer: I did it the other way around, doing startups first.) Why? Because the big company also gives you a brand-name boost and some context about what decision-makers in the industry consider important, which makes it much more likely you'll pick a _good_ startup when you move to do that. While if you screw up in picking an initial startup, it can be very hard to un-do that and qualify yourself for big-company jobs later in life.

</comment></comment></comment><comment><USER6> Got to keep the supply of young, cheap, idealistic and naive new developers going somehow ;-)

/am a boring developer at a boring big company

<comment><USER7> How is life having a secure check coming every month?

<comment><USER8> They're still a happy fantasy, given how easy it is to let go here in the States.

<comment> UK-AL The only real security is the amount of cash in your bank account. Startups aren't good at that either, unless you hit the jackpot.

<comment><USER8> I agree. Straight-up cash provides much more security. Case in point: Think of all the pensioners who discovered that their retirement income -- money taken out of their paycheck -- had vanished into smoke these last several years.

</comment></comment></comment></comment></comment><comment><USER9> This is very seductive advice: don't become a cog, become a shining star. Jump right into the role which gives you the responsibility you _deserve_.

Except, CS graduates have no idea what it means to work in a corporate environment. I didn't - I learned about Big-O notation, binary sorts and searches, and lots of algorithms. I didn't learn how to navigate corporate politics, PCI or HIPPA regulations, the reasons security really matters, or how to write software which needs to survive for years past the deadline.

Perhaps even worse, recent college graduates going straight to startups are unlikely to find mentors to work alongside; they end up working without safety net, someone who can help soften the impact of their inexperience and facilitate catching bugs when the cost to fix them is 1x, instead of 100x. I didn't know how to take critiques of my code as critiques of my code, not my baby.

If they're successful, and their company hires people with experience at growing businesses, their world will be turned upside down as their projects are taken away from them and they are relegated to smaller and smaller roles (or worse, be promoted to management). They will go from being the star to a cog, and many will find it hard to accept; it will slow the company's growth and make the transition more painful than it needs to be.

I once had to walk a developer from a 4 year old startup through the hows and whys of separating variables from code. They knew and had experienced the pain points of having hard-coded values everywhere, but were unaware of the best practices and didn't know where to start.

I keep saying "cog" as if it's a bad thing. It's really not - the machine can't run without someone filling the role you fill. And yes, you are somewhat replaceable, but you knew this. That replacability is why we can job hop the way we do. And if you're willing to accept this, you can make the most out of it. Learn from your betters, hone your skills by mentoring others, replace yourself with code, and move on to something more challenging. Or, once you have the experience, create/join a startup, understanding what the future holds if you succeed.

</comment><comment><USER10> Advice from a VC is offered for their benefit, not yours.

<comment><USER11> Not just from VCs, I could have saved my self a lot of anguish if I had realised this when I was younger.

<comment><USER12> "Cui bono" is a popular phrase for a reason

</comment></comment></comment><comment><USER13> Are YC biased? Of course they are. That doesn't mean they aren't right. Paul Graham _used to_ think working for a big company for a few years was a good thing [for someone who at some point wants to start a company], but he has since (5-10 years ago) changed his mind.

 _In an essay I wrote a couple years ago I advised graduating seniors to work for a couple years for another company before starting their own. I 'd modify that now. Work for another company if you want to, but only for a small one, and if you want to start your own startup, go ahead._ ([http://www.paulgraham.com/boss.html](http://www.paulgraham.com/boss.html))

I encourage you to read the whole essay if you want to understand _why_ they say what they say, rather than cynically dismiss it as bias.

</comment><comment><USER14> > Students were also encouraged to steer clear of large companies.

Maybe because it's cheaper for Sam's YC companies to poach talent from Acme Co. rather than Google or Apple.

</comment><comment><USER15> Maybe the 'MIT students' are a different enough population that the advice has to be specifically tailored for them.

Somehow, I doubt it. I think the average MIT graduate is just as naive (and inexperienced) as graduates from other universities. If so, then most should join big, established companies.

Startup life is not for everyone. Some people might do better (even financially) staying at more stable companies. There's nothing wrong with that.

<comment><USER16> > Some people might do better (even financially) staying at more stable > companies.

I would venture to say that MOST people will do better financially if they stay at a large, established company. A new grad might think their 0.05% equity stake will make them rich, but most startups fail, and even the ones that don't are rarely homeruns. Established companies with deep pockets often pay better, and grant their employees RSUs. RSUs are much easier to cash out if the company is publicly traded.

I was recently granted a non-trivial pile of RSUs. Enough for a down-payment on a house in the Boston area. That's better than I'm going to do with 99% of startups, and my salary is reflective of a mature company with deep pockets. (Another thing startups often lack.) In many ways it's the best of both worlds. And if I leave? It'll be for another large company (Google, Apple, Facebook, etc.) that'll make me whole for anything I leave unvested on the table. Good luck with that at a startup--liquidity matters.

I'm not alone -- I have friends at Apple and Google. Their RSUs vesting layers are crazy. For one friend, it's 70% of his gross salary, and he's not what we would call "senior management". He'd be stupid to join a startup.

<comment><USER17> Getting hired by Google / Apple / Facebook isn't exactly easy.

If you don't have the required credentials, getting into the startup world suddenly seems more appealing I think.

<comment><USER18> Yes, but we are talking about MIT students. It shouldn't be too hard for them to get hired by one of the big 4 or 5 companies.

</comment></comment></comment></comment><comment><USER19> PG used to tell students to work for an established company for a while after college, then start a startup later with that experience under their belt. After a few years of YC, he changed that to: if you want to start a startup you should just start a startup. (Pretty sure he still makes an exception for finishing school though.) I don't recall him saying that experience at BigCo was bad, just that it turned out not to prepare people for startups after all, so if a startup is what you want to do then you should just plunge in and figure it out.

Experience at BigCo can be a mixed bag. I worked for two years at one, and it took me perhaps 10 years after that before I stopped noticing bad habits in myself that I'd acquired there—and I still wince at the memories. But the experience was valuable in one way: I learned a lot about users and their problems.

</comment><comment><USER20> Start ups are not for everybody.

It's horrible and most of the time they will work you to death because it's a "start up" environment. They will try to get you to invest as much time of your life as possible.

Do not trade your life for money.

I thought you could learn new skills in start up because they usually are lean in money so you end up wearing multiple hats. That's good until you realize that most of the people that is in charge of technology are full of it. They buy in MongoDB hype or NodeJS hype without fully understanding the trade off.

You're better off learning new skills on your own time.

If you don't like big company cause of their crazy interview such as Google you can always try medium size companies.

</comment><comment><USER21> While large companies have their weaknesses, there's also a lot that can be learned working at one for a couple of years out of school before jumping into a startup. Even if the actual role isn't as "fulfilling," there is a lot more access to experience and wisdom that can be a lot harder to come by in a startup environment.

</comment><comment><USER22> Something I've learned from working at tiny startups (the smallest was 4 people) AND mega corps (the largest had north of 100,000 people) AND everything in between is how to organize differently sized groups of people.

I keep hearing about founders who are only good during fast-growth periods, then when the company gets big they have to move on. I think you'll find that most of those founders have no experience working in large organizations and simply don't understand how to organize people at growing scale. They want to hold on to the feel of when the company was exploding and had a 12 person flat org structure.

But that's because a 12 person flat org structure is _easy_. Those people will run themselves, and in a fast growth environment are too busy to play politics and form informal power structures.

But now the company is at 100 people, 200 people, 1,000 people. No about of book reading is going to get you prepared for how this company should run.

Not all that long ago, I worked at a startup that was under rapid growth, but was struggling to keep head count above 100. A few months in, I realized it's because the founders simply had no clue how to run a company at that size. It turn, it created a bad work environment and turnover was so high that they couldn't even hire their way to growth.

I constantly compared it to my own experience, where I ran one task on one program in one company and it grew from 4 to 80 people under me at one point. I learned some hard lessons during that time, but those are lessons I'm able to apply now wherever I go. To me, the growth issues were obvious and easy to fix. To the startup founders they were a continuous enigma, unyielding to their attempts at fixing with increasing benefits packages and lip service. I too finally got tired of the stubborn flailing and eventually left.

To cultivate and develop the skills needed to deal with differently sized groups, you _have_ to work in those environments and learn how to do it.

Okay, maybe you don't have to, sometimes you can fake it with enough investment money and a good executive recruiter your investors force you to take on. You can hire suits who have that experience as buffer layer, professionals who do have that experience and can handle a big company. That's what Zuck did and that's what lots of successful startups do.

</comment><comment><USER23> I'm not someone that drinks the startup koolaid by any means, but I agree with them that working for a large company has very limited value if your goal is to start your own company.

I worked for one of the biggest tech companies as a developer, and I learned no real skills in my tenure there. My responsibilities were just so narrowly focused and any knowledge I gained was specific to that codebase, which is not useful at all to potential future work.

The sad thing is, the best way to increase efficiency at that job was knowing the existing codebase better. I chose to quit instead.

<comment><USER24> The biggest benefit of a stable paycheck for a few years at a medium-sized or big corp is building your cash reserves. Even if you learn nothing in that job, having 1-2 years of savings in the bank before quitting and starting your startup will give you leverage when dealing with investors early on. You won't need to take angel or VC money to get started.

</comment></comment><comment><USER25> Actually, does anyone have data on the average student debt of MIT grads. To start a company, Even with a million $ seed, the founders can take home around 80k. Will that be sufficient to afford the monthly debt payments ? This might be a huge factor for grads while making the choice to startup or join a big company. A large company can at least guarantee a consistent loan repayment schedule. It's immensely difficult to start a company with a large debt hanging above your head.

<comment><USER26> I don't know the numbers for MIT specifically, but most top-tier (Ivy- equivalent) private colleges have very generous financial aid, and consequentially very low levels of student debt.

It's when you go down to the second tier and below that student debt becomes a serious problem, as lots of schools try to match the Ivy experience but without the benefit of a large old-money endowment to subsidize financial aid.

</comment></comment><comment><USER27> Not really looking to get into a debate here, but for those being critical of Sam, PG more or less said the same thing (to an MIT audience): [http://www.paulgraham.com/mit.html](http://www.paulgraham.com/mit.html)

</comment><comment><USER28> I think joining a startup can help you gain technical knowledge. If a student is motivated money wise right from the college, he/she would definitely opt for big name companies. Ofcourse, this varies across geographies especially in terms of money.

</comment><comment><USER29> _" Y Combinator usually invests $120 thousand in its startups, but Altman revealed during the Q-and-A that they have plans for helping startups requiring more money. "We have some news coming on that,"_

different type(s) of startups being funded?

<comment><USER30> Or just a structure that better accommodates capital intensive business. There are markets where there's no MVP, with the emphasis on _viable_ a couple of people can hack up in a year because the list of minimum necessary attributes is too large.

Under the current structure, raising capital can swamp developing a product when the minimum skin is say $12 million even eating ramen. Some businesses require 100 staff and not requiring the founders to sell unrealistic visions of equity turning into wealth compensating for below market salaries is a way to build better company culture when the work demands 35 or 60 people.

</comment></comment><comment><USER31> Large companies have more mentorship possibilities but in my experience, small companies are a _lot_ more fun to work for.

Would you rather work on a part of a big product or create a complete product yourself/with another engineer?

<comment><USER16> I can confidently say a few things about working at a big company:

\- I have created whole products from scratch by myself with my tech lead doing code reviews

\- I have worked on "legacy" code as well

I find both satisfying for different reasons. Legacy code has a bad rep, but "legacy code" should really be called "valuable code", because it has already demonstrated its market value. It has nothing to prove. I've learned things from reading legacy code: little stuff like language features, and bigger stuff like architectural tips.

Both are different, both can be rewarding. Greenfield isn't synonymous with better or more fun. I personally enjoy being the commando[1] (with infantry tendencies as well), but the other stuff can be good, too, and we each have different preferences. That said, being the "commando" can be _exhausting_ , and I wouldn't want to do it all the time.

[1] [http://blog.codinghorror.com/commandos-infantry-and- police/](http://blog.codinghorror.com/commandos-infantry-and-police/)

</comment></comment><comment><USER32> Interestingly, even Sam was not really a successful founder. He found success after he was hired by YC.

</comment><comment><USER33> Sam is obviously not a disinterested party here. Don't join a big company- start a new investment for him to participate in or join one of his existing investments and help to make it a success. But in my experience nothing opens doors for you like having solid experience at a well known and well respected company. If you put in 5 years at Google, Apple, etc. you will find it to be much easier to start (or to get hired at) a start-up than if you had joined a start-up right away.

<comment><USER34> _If you put in 5 years at Google, Apple, etc. you will find it to be much easier to start (or to get hired at) a start-up than if you had joined a start-up right away._

Like Zuck? Drew Houston? It's easy to rattle off a dozen names who wouldn't have started their company if they'd worked at a big company for 5 years.

The correct answer is "figure out what works for you." And stop being cynical. It's really crummy to see Sam Altman, one of the nicest and most genuine people, dumped on here just because nobody here knows him.

I know him. Or I did, once. He's not the type of person you describe. Just the opposite: what sets Sam apart is how much he believes in you. You generally don't find it elsewhere in the world. It's rare for your own parents to believe in you in the way Sam does. So why go to a big company where they definitely won't believe in you or let you forge your own opportunities? And yes, you're right, you can spend years climbing the modern equivalent of the corporate ladder in order to get people to believe in you and let you take a risk. But:

 _in my experience nothing opens doors for you like having solid experience at a well known and well respected company._

Empirically, you're wrong about that. There are now over a thousand YC alums who prove you don't need it.

Sam is saying, "If you want to do a startup, here's what works on average." Nothing more.

<comment><USER33> Sam isn't getting dumped on. It's a simple fact that his best interests don't necessarily coincide with your typical college student's best interests. In my experience, on average you will be better off working at Google for 5 years than by starting a startup with overwhelmingly low odds of success. At BigCo you will make more money, get better benefits, and you'll probably have more free time as well. After a few years you will probably have more financial security and more name-brand recognition than if you had spent a few years in the trenches at a start-up (which in all likelihood won't even exist at the end of this 5 year window). That doesn't mean that everyone should try to work at a big company but your typical software engineer will be better off in the process.

As far as Zuckerberg, Drew Houston, and other big winners in the startup game, well, you might as well interview lottery winners for their secrets of success. No doubt these guys are very smart and hardworking, but so are the far more numerous legions of startups that fail.</comment></comment></comment>


The Startup Diet (Lost 15 lbs while at an Incubator) - <AUTHOR> http://www.pixelmonkey.org/2010/10/23/the-startup-diet

<comment><USER2> I do not find this "Startup Diet" to be that miraculous. To be honest, I quit reading the article about 1/4 the way through (and skimmed the rest) when the author implied that there was some huge revelation that prompted the need for this lifestyle change (ie- they only had $20,000 between two people and their number one cost was food). I understand how easy it is to blow money on food, but it doesn't take a "Startup Diet" to live on the cheap while eating healthy.

I'm in college, and I budget myself $35/week for food, putting me at $5 a day. I eat very comfortably and I almost never eat leftovers. If I wanted to, I'm sure I could live on as $20/week comfortably, but I happen to enjoy the social aspect (or convenience) of eating out occasionally.

There's no secret or trick or magical diet, and you can pretty much eat whatever you want - you don't have to limit yourself to lettuce and beans. I'll give some insight on what works for me.

I buy groceries every Sunday night, spending $15-20 each week. My weekly purchase usually consists of some combination of the following: frozen chicken breasts, pork shoulder, eggs, asparagus, onions, carrots, apples, oranges, bananas, bread, turkey, peanut butter, jelly, sliced cheese, yogurt, rice, pasta, tortillas, nuts, canned tuna, mayonnaise, mustard, crackers, and occasionally canned soup.

Some things last obviously longer than a week (rice, frozen chicken, peanut butter, jelly, etc). During those weeks I usually spend $20+, resulting in less spent the following weeks. I always buy generic-brand items, except for certain items where quality can be an issue (tuna). I have a drawer full of spices that get used constantly. Like I said before, I almost never eat leftovers. I prepare as much food as I can eat in a single sitting.

Here's what I don't buy: frozen food (pizzas, hot pockets, tv dinners, etc), snacks, junk food, soda, milk (lactose intolerant), beef (usually too expensive), coffee, sugary drinks (Gatorade, lemonade, fruit juice), name- brand items, and beer.

Of my $35 weekly budget, $15-20 is spent on groceries and the rest is spent eating out. Usually I eat out because there is simply not a free hour in the day to run back to my apartment and whip a sandwich together between classes/meetings. Eating out, for me, means grabbing a sandwich from Subway or Potbelly, or stuffing my face with delicious Chinese buffet food with friends if I really feel like splurging ($7.50). On the weekends I'll go crazy and get a huge slice of pizza and soda from Sam's club ($2.80?).

So there you go. You can eat almost whatever you want, healthy or unhealthy, for $35 or less each week. Theres no trick or magical formula.

<comment><USER3> I think you missed the point of my article (which is OK, as you admitted to only reading 1/4 of it). It's not just about saving money. It's about saving money + eating healthy + saving time + feeling productive + rewarding yourself for a week of focused work.

All of the above. Your diet is good at saving money, and you follow many of the same ideas we did -- plan ahead, shop for the week, stay away from junk food, etc. But we turned it into a system, we turned eating into a routine, and we treated our kitchen as the command center for our company and the meal factory for our diet.

This freed up time to work the requisite long hours incubated startups tend to require, while counteracting the general sedentary and exercise-deficient nature of startup work in the early stages.

<comment><USER2> I decided to read through the rest of the article right before your comment. It pretty much went where I thought it was going. I do realize it was not just about saving money, but all of the other things you listed. My eating habits accomplish the exact same things (saving money, eating healthy, saving time, feeling productive, etc). The only point I you might be able to argue is saving time. As it turns out, cooking doesn't really take that long. In fact, I think I could cook, eat, and clean faster than I could walk to a crappy campus restaurant, eat, and walk back. Hence, time saved.

The major difference lies in the consumed food. You eat the same (arguably boring) food over and over, and I eat almost whatever I want, switching it up every week and keeping it delicious.

<comment><USER3> Fair enough :-) Anyway, I fully encourage other ideas of how to save money/time and eat healthily. I do think it's one of the "low-hanging fruit" for cutting costs while running a startup that sometimes is neglected. You're ahead of the game if you're thinking that way while still in college, so kudos!

</comment></comment></comment></comment><comment><USER4> For the lettuce, I recommend investigating growing your own. It's pretty easy to grow (climate allowing) and you can buy a 6 pack punnet of seedlings for a few dollars. Each seedling will supply probably 20-30 usable leaves over it's lifetime. The more you pick the more you get. It just needs some decent soil and a bit of water. If you let older plants go to flower and seed, chances are it will sprout again in large numbers without explictly replanting the seeds. Nothing is crisper than lettuce leaves plucked straight from the plant. Soggy lettuce in the fridge is not fun.

<comment><USER5> This sounds delicious, thanks for the advice. Do you ever have problems with pests?

<comment><USER4> Not with the lettuce, somehow. I have a lot of trouble with caterpillars on my other vegies such as broccoli, but they don't seem to eat the lettuce much. Maybe I'm just lucky. I have some organic bug spray but I don't use it much, I find it easier to just go and squash any uninvited visitors, and it's good thinking time to spend 5 minutes a day just looking for bugs (har har). I'm a rank amateur at growing - I experience tomato crop failures all the time. But for hardy stuff like lettuce and (most) herbs, it's really quite simple and rewarding.

I'm quite lucky with my climate though, but for a lot of people in California they should be similarly blessed (I'm not in California).

One thing I didn't note was that you'll need to plant your seedlings about 3-4 weeks before you're ready to start harvesting. But get it right and you should have an endless supply from about 6-10 plants, and you don't need much space for this. Just choose lettuce that the whole plant doesn't need to be harvested - ie, not 'iceberg' lettuce.

edit : here's a pic of my first crop about 4 weeks after planting. It eventually grew to about 4 feet tall. There's a couple of different varieties in here, I now only go for the ones like in the original article with a roundish leaf.

<http://i54.tinypic.com/332p94k.jpg>

</comment></comment></comment><comment><USER6> I lost 15 pounds once with "the MMO diet." Simply forget to eat on the weekend until Sunday evening, then go to Subway.

I also lost 10 pounds once with the "walk 25 minutes to the office and another 25 minutes back home" program.

<comment><USER7> Ah yes. I did that one. I called it the "Starcraft diet".

</comment></comment><comment><USER8> I had a similar post earlier this summer:

The Startup Diet: How I lost 35lbs while working overtime [http://paulstamatiou.com/programmers-startup-diet-how-i- lost...](http://paulstamatiou.com/programmers-startup-diet-how-i- lost-35-pounds)

<comment><USER9> Hah, the "Common Programmer Health Problems" article you link to says that being a guitarist is worse for your hands than being a programmer. I wonder if being both is doubly bad. And I wonder if the fact that I play 12's is even worse. Maybe I should start doing hand exercises.

Also, please tell me you got like ten free pairs of those shoes for doing that commercial.

</comment></comment><comment><USER10> 1) While not part of the diet, sleep is highly related to the magnitude of your cravings. Sleep 7 hours. Sleep less and you will destabilize your blood sugar by expending too many calories.

2) Bean-based diets have issues, and could lead to bloating and other not so pleasant things, especially if you aren't a solo founder. Easier-to-digest proteins, flax seeds and nuts, cottage cheese, tofu, mixing it up can help a bit.

3) A bit contradictory here: "Healthy, energy-filled food to enhance productivity Low daily calorie intake to prevent weight gain" If you're going to eat fewer calories, your energy is going to drop. Make sure you eat enough calories, and keep it complex to keep your blood sugar stable.

4) If you have a propensity to binge, don't exercise really hard, favor frequent, consistent exercise rather than rare, intense ones.

5) Set a cut off time in the evening, and absolutely do not eat after that time. Do not eat right before you go to bed.

<comment><USER6> _2) Bean-based diets have issues, and could lead to bloating and other not so pleasant things, especially if you aren't a solo founder_

Possibly suggested as a way to _become_ a solo founder!

<comment><USER10> I wouldn't be surprised if the opposite is true. Maybe hackers find flatulence flattering :)

</comment></comment></comment><comment><USER11> Seems low on Zinc, Calcium, B12.

Even if you're a vegan you should consider Oysters. They are the most concentrated natural source of Zinc, do not have a central nervous system, and oyster farming actually helps clean the environment. Diets that are mainly vegetarian have too high of a copper to zinc ratio, so Oysters are a good way to offset this.

Also sardines are a really good, cheap source of Omega3 fatty acids, Calcium, Vitamin D, and B12, which also all might be low in such a diet. Also unlike much larger fish such as tuna, they contain much lower levels of Mercury and other heavy metals and are much more likely to be sustainably fished.

<comment><USER12> > Even if you're a vegan you should consider Oysters.

Perhaps you mean, "Even if you're a vegan _and you don't feel like being one anymore_ you should consider oysters."

<comment><USER13> "Two common ethical objections to the consumption of animals is that they feel pain (and that causing pain is wrong), and that their cultivation is environmentally harmful. On both of these, oysters are significantly closer to plants than animals."

\---Wikipedia

Other discussion: [http://ideas.blogs.nytimes.com/2010/04/08/why-shouldnt- vegan...](http://ideas.blogs.nytimes.com/2010/04/08/why-shouldnt-vegans-eat- oysters/)

<comment><USER12> That was incredibly interesting.

</comment></comment></comment></comment><comment><USER14> Living in Berkeley gives me access to arguably the best grocery store in the USA, the Berkeley Bowl. 3 pound bags of spring mix lettuce are $4.50.

</comment><comment><USER15> I lost a boatload of weight during YC, but that was largely due to my scheduling a quadruple wisdom tooth extraction about a month into it, before my COBRA ran out.

</comment><comment><USER16> Awesome post. Another tip I've used before is to buy a really big container of high quality protein powder that has lots of supplemental vitamins/minerals. Makes for a nice quick meal if you're super busy, and can help satisfy any cravings for those with a sweet tooth.

When I've done this, I can usually get a large number of meals replaced in one container with a cost per meal between $2-4.

<comment><USER16> You can also mix with water rather than milk which saves you additional costs and calories.

<comment><USER3> If we were living off protein powder and water, we would have REALLY been looking forward to the cheat days ;-)

</comment></comment></comment><comment><USER17> I recommend cottage cheese for an alternative protein source. I'm having an awful lot of it right now...

<comment><USER3> That's a good point. Some other tricks we used for low-cost and healthy snacking:

\- pick crunchy veggies (carrots, peppers, cucumbers), slice into strips, package into small ziplock bags (prep ahead of time)

\- hummus, though make sure to buy larger sizes, since they tend to gouge the prices on the smaller sizes

\- peanut butter and celery (oldie but goodie)

\- creamed spinach (frozen), can be eaten straight up or as a dip for veggies; I also used to add a little low-fat cheddar cheese

<comment><USER18> I cannot eat celery. I think I loose more calories then I gain eating that stuff, however, the rest of this list makes sense. I already eat hummus all he time, and find it's a great snack food to keep energy up.

<comment><USER19> _I cannot eat celery. I think I loose more calories then I gain eating that stuff_

Looks like you're right. <http://www.snopes.com/food/ingredient/celery.asp>

Claim: Eating celery results in negative calories. Status: True

</comment></comment></comment></comment><comment><USER20> I like the use of legumes as a base. Ever think of trying dried beans over canned? They are generally cheaper per serving as well as lower in sodium.

<comment><USER3> One of the founders in our "startup house" came back to NYC and tried a version of our diet, except he swapped in dried beans for canned to save even more money. Soaking them the night before is an extra step, but it will likely work the same way.

I'd love to report success, but unfortunately he only stuck with the diet for a couple of weeks. Not enough data. Don't think it had to do with the dried bean choice though. I think regimented diets like ours are just easier to do with two people.

<comment><USER21> A pressure cooker is best if you're using dried beans...you can cook (everything) faster and retain more nutrients.

Also, your body will adapt very quickly if you start consuming legumes consistently...you will overcome the bloating/flatulence issues in no time. It's best to make the transition slowly, though.

</comment></comment></comment><comment><USER22> Using lettuce instead of tortillas is brilliant! Tortillas account for a big chunk of the costs in a wrap.

</comment><comment><USER23> Surprised he didn't mention canned tuna.

<comment><USER3> We (I'm the author) actually had vegetarianism as a restriction in this case, my co-founder was a vegetarian. But I bet canned tuna would work well, too!

<comment><USER22> was? did he die?

<comment><USER3> No, still alive and well. Just a tense mix-up. My co-founder is currently a vegetarian, and in fact he was one then, too!

</comment></comment></comment></comment><comment><USER24> So true.</comment>


Show HN: Dolater.io – Run background tasks on the cloud - <AUTHOR> http://dolater.io

<comment><AUTHOR> Owner here.

dolater.io runs your background tasks in a scalable environment.

Wrap your workers in a docker image and queue tasks to it, dolater.io will process the queue as fast as possible.

It's currently in a very early stage, I would like to get some feedback, opinions, know missing features you'd need, etc.

For now it works with hub.docker.com public images.

It's not ready for production usage yet, but I'd like to get your feedback anyway as if you were considering it for your production environment.

</comment><comment><USER2> This looks really cool, I can definitely think of a few use cases where a docker image might come in handy (vs a service like iron.io that just supporting a variety of languages on IronWorker). At the same time, having to build an image for small ad-hoc tasks might get a bit cumbersome.

<comment><AUTHOR> Yup, I know that building a docker image for every job can add a lot of friction to the project, but it adds lots of flexibility to the users.

</comment></comment><comment><USER3> The main problem I always have with remote background jobs is that I need to have complete environment working there also.. may be I have to decouple from my framework . I think the Docker Approach is what makes your offering different from others and interesting.

Good luck

<comment><AUTHOR> Thank you. Regarding your needs, I assume you'll also need access to the DB and so on. I'll have to figure out how to run the jobs as close as posible to the customer database.

</comment></comment><comment><USER4> How long will jobs take to start up? Is it seconds? (i.e. you have a queue, and machines ready to go)

<comment><AUTHOR> If there's nothing queued it starts almost immediately. In some cases while testing the job finished right after queuing it and showed as completed right away. Right now it uses rabbitmq for the queue but even if I replace it I want to keep it like that.</comment></comment>


Fun fact: Google HQ cost $110M to build in 1997 - <AUTHOR> http://dryoungassociates.com/projects/pdfs/Amphitheater%20Tech%20Center.pdf <comment><USER2> In some ways, the more fun fact (which I had known and forgotten) was that it was built for SGI.

<offtopic digression> Damn they made good (albeit expensive) computers back in the day.

Some of their pricing was even crazier than the 486SX (a DX chip with a laser run through its math coprocessor) which at least started as reclaiming processors which failed QA.

For example, the Challenge DM could be converted into a more expensive model (that allowed for more expansion) simply by removing a single screw that shorted out a portion of the backplane. We called it the $10,000 screw.

An SGI salesperson told us about it (and then sold us an expansion board which worked fine). </offtopic digression></comment>