168 karma · joined May 5, 2013
1) Try to get the implementation 100% correct on the first try. I don't mean that you should implement the whole system in one go, but the part you implement should do exactly what you want it to do (i.e. no typos, mixed up variable names, etc.). At first I thought this was a bit harsh, but it was amazing how much debugging you can avoid with a little more focus in the beginning. Also, it forces you to adopt good coding practices and make sure your algorithms are fully specified.
2) Don't tolerate tedious work. If there's any part of your workflow that's tedious, spend a lot of effort trying to minimize it. Some examples of things you might do: write a script, refactor your code, use a better editor, use a different programming language. You won't learn much from changing 100 variable names to camel-case, other than how painful it is. You will learn something from writing a tool to help you do that.
3) Think about how various libraries and frameworks you use are implemented, especially if they have features that seem like "magic". Try to reverse-engineer their design, or take a look at their source code (if available). This is a natural way to gain exposure to new ideas.
Regarding more "theoretical" subjects like algorithms and data structures that you might need to know for interviews, you could practice on programming contest websites (e.g. www.codeforces.com) or read some textbooks. However, in my opinion, those are not nearly as important for a software developer as the three things mentioned above.
If you don't have a reasonably strong belief that your idea is going to work, why bother testing it at all? At the least, you should probably try it on a tiny scale first (i.e. on yourself or a few friends) before taking investments, hiring employees, etc.
The interesting thing about Github vs. Bitbucket is that both usage patterns can make sense depending on the project and user. For individuals, you might have a lot of repositories for small projects that end up abandoned after a while. For teams, it might make more sense to have a flexible headcount.
1) There's a lot of miscellaneous info on the front page, but none of the things that I really care about. The basic info I want to know: price, what areas you serve, and what times you're available. It would also be helpful if you had this information all in one place so I don't have to keep scrolling around or clicking links.
2) It's hard to pin down exactly why, but the visual design of the landing page seems rather inconsistent. The various graphic elements seem like they've been designed individually without regard to the look and feel of the site as a whole. A more specific issue is the "Book Now" bar in the first screen. I have no idea what the input field to the left of it is for, and when I type into it, the text is really faint. Also, because of point (1), I am far from ready to "Book Now" as the first action upon visiting your site.
P.S. On this page https://sweetlyclean.com/booknow/ there's a typo where "Your" should be "You're".
I would be tempted to say that the people who don't understand should just be more willing to think spatially instead of being stuck in their other modes. However, then I imagine how it must feel for someone with perfect pitch to try to explain to me how to recognize pitches. I can't do it just by "trying" harder; I don't even understand what it is I'm supposed to be doing.
This is not to say that e.g. people who are not good at spatial thinking shouldn't still try to get better at it. But it does lead me to think that to some extent these learning styles really are, if not genetic, at least deeply embedded in our personalities and early childhood development.
I think it would be really useful to have a tool that visualizes execution paths of programs to help you understand the general architecture of someone else's project. I believe debugging tools are able to do this to some extent, but I haven't seen anything that exactly fits, especially for JS. I would want to be able to do some interaction (e.g. mouse click) and see a visualization summarizing all the lines of code that were run without stepping through them one-by-one. Maybe this is a direction that PojoViz could go in eventually.
It's commonly asserted that ideas are worth next to nothing, the difficulty is all in the execution, etc. I don't think that's entirely true. If your idea is just a vague one-liner like "facebook for pets", then sure, it's not worth much. But as you start building out a prototype, you're forced to be more specific and refine the idea, and it becomes more valuable. If you've got a handful of users and you've gotten some feedback, that's yet a bit more value. And if you've thought about the problem for a long time, you will probably have a good sense of what are the main challenges and what approaches won't work. That's valuable too.
I don't think there is a well-defined line between refining your idea and "executing" on it. Obviously there is a limit to how much you can accomplish in the planning and prototyping stage. However, I suspect it is a lot higher than is commonly believed. Working for 3 months may sound like not very much on the scale of a startup's lifetime (let's say 2-5 years before it either fails or grows big), but consider this: maybe the OP did 4 or 5 failed 3-month projects before he or she got to this one, which seems somewhat promising. Suddenly that looks a lot more significant than 3 months.
For this specific case, we don't have enough details to assess whether the OP has really hit on something big, or if there is still a lot of uncertainty about whether the idea will pan out. So unfortunately, after all that discussion, I don't really have an answer to the original question. I think what I would do in your situation is to make my best guess as to the "fair split" based on what I've contributed and the expected future value (let's say I decide it's 70/30), offer the friend that split, and if he/she accepts, I would immediately change it to 65/35. That way, they should be happy, but things are still close to fair from my perspective.
This means thinking of yourself as the user and optimizing for your needs (avoiding repetitive tasks, minimizing bugs in your project). It means sometimes creating interfaces for creating new tests, like how admin pages are nice interfaces for SQL queries. Conversely, it also means things like not writing overly fine-grained tests in the name of test coverage (this would be like if your admin page had two separate tools for "change user first name" and "change user last name").
I have to agree though that modern designs, while slick, are often no more usable than designs from the 2000s. For example, take the point about vague icons near the end of the article. Even though you can often guess roughly what those icons do, that moment of uncertainty when you click them to see what happens creates a jarring user experience that could have been avoided with a few words of text.
A major contributing factor to this trend in design is obviously the emphasis on mobile devices (e.g. sometimes you have to use those small icons due to limited screen sizes). It annoys me that a lot of this mobile-driven design gets copied over to the desktop even when the same constraints no longer apply. Unfortunately, this is not completely without reason. To me, words like "refresh" are less ambiguous than circular arrows, but maybe to someone who grew up using only tablets and iphones, the circular arrow is more familiar.
* The usernames do not appear next to the avatars in the posts, and generally users are identified by avatar rather than username. This is very confusing, especially since avatars can change, and it's hard to distinguish faces in images that small.
* Along the same lines, icons are used all over the place instead of text. I find this annoying, as the icons are not self-explanatory, and I have to hover over every little icon in order to understand what I can do. For example, I had no idea what the "topics" and "posts" icons meant before hovering. Similarly, there is no reason to use text in the navigation bar (add an icon next to the text if you must). To be fair, the icons have the advantage of taking up less space on mobile.
* The styling was a bit jarring to me, with the high contrast and lack of strong borders between elements. The whole purpose of going to a forum is to read a lot of text, so it makes sense to use more neutral background colors. Of course, this can be customized I'm sure, so this is more feedback on the demo site rather than the platform.
But overall the implementation seemed solid, and I can see this eventually becoming a nice BB platform.
Edit: this is all based on https://community.nodebb.org/.
Then have all the wolves eat goats until only one of the species is left, say 2k wolves. Then do k iterations of lion eat wolf and wolf eat goat.
One thing I don't understand about the r and g thing is how it makes sense to compare these two values at all. Isn't capital a measure of accumulated wealth, while GDP is a measure of wealth produced in a certain unit of time? For example, what if we just maintained a perfectly steady GDP that exceeded our consumption needs; wouldn't that yield a positive r and explain r > g? Does someone who read the book have a better understanding of exactly what these two numbers mean?
P.S. I find it implausible that Piketty would make such an elementary mistake as the arithmetic mean vs. geometric mean issue discussed in the article. But again someone who has actually read the book should weigh in.
EDIT: More specifically, I am wondering why he's calling for the help of "technically enabled" people. What is the relevance of technology here?