I didn't do it alone of course (probably a dozen people have worked on the UI, and hundreds on the backend), but it was my main project for around 9 months. Lots of videos that people care a lot about go through there.
That seems like a very impactful project. Hundreds of thousands of people (millions?) have used Live videos on FB. Not many engineers can say they've made an impact like that. Congrats!
Curly braces - F# is a whitespace-significant language, so contexts are still plenty visible.
Semicolons - If that's the main thing telling you where an expression ends, it's time to start taking your code formatting more seriously.
Parentheses - Still exist, but only for expression grouping and tuples. It's just that they aren't used as a function application operator. This admittedly takes some getting used to, but starts feeling easy and natural surprisingly quickly.
Importantly, function application without parens feels a lot nicer in F# than it does in Scala or Nim. I think the difference is that, in F#, adding parens around a function's argument list would actually change the meaning of the expression, and likely cause a compiler error.† In Scala or Nim, they're (sometimes) optional, which just creates this unnecessarily confusing situation, not entirely unlike optional semicolons in JavaScript.
† - If it's a 1-ary function, you'd be fine, because it would interpret the parens as grouping operators around the argument. If it's a 2-ary function, then it would probably cause a compile error, because parens around a space-delimited list are (I'm pretty sure - it's been a while since I last worked in F#) not valid syntax. If you add commas, so that it looks like a C# method call, it would then interpret it as a tuple, which would probably mean a compile error, unless the function has an overload that accepts a tuple of that arity as its first argument, and, even then, only if applying that version of the function doesn't somehow lead to a type error.
It is because those things are simply not needed to parse or understand the code.
Everyone indents anyway. So why need braces?
Most people write one statement per line. Who needs semicolons. I've often called it the most useless character in programming language history. Whenever I switch from a language that doesn't use them to one that needs them, it's a horrible transition. I have to mentally remember to add this character at the end of most lines.
Parentheses for function calls - in some contexts they are helpful. In most, though, they are not needed. Wherever they are needed, you will have them in F#. For people who went from Python 2 to Python 3, you'll know the pain of suddenly needing parentheses for print statements, and for most of those people, you will not see any benefit to adding those parentheses. Extend that to other functions.
My editor understands when to indent in Python, and often when to dedent. When it doesn't know to dedent, I just hit Backspace on the next line to close the indented block.
I understand it's a matter of taste, but I don't understand why people insist on repeating themselves -- you're already going to have something indent your code for readability, why not have that just be what the language uses, too?
That said, you should know that in Python, at least, there is famous first-class support for the brace styles of many other languages, invoked by the brace operator "#". For example, if you want C-style braces you can simply write like so, using the brace operator to tell Python what you're doing:
def hello(): # {
print("Hello, world!")
# }
And Python will automatically understand it correctly!
A more complex example uses Ruby-style "end" and conditionals:
def odd_or_even(num):
if num % 2:
return "Odd"
else:
return "Even"
# end
# end
Python's advanced brace-style parsing AI will correctly handle this. You can even mix and match brace styles within a single codebase, or even a single file, for times when your team just can't agree on one approach.
Fair enough. I save on keystrokes by not inserting braces. I do have to manually indent once in a while, but the editor will usually figure out what I mean.
As an example, in a for loop in Python, I need to press a single key for indenting[1]. In a language like C, it would be 4 keystrokes - 2 for each brace. Come to think of it, this is true for if conditions, functions, etc. Pretty much all places you'd need braces in C. I'm having trouble figuring out where in regular programming in Python a braces would mean less work for the programmer.
Indenting is simply less work than inserting braces.
[1]Strictly speaking, for dedenting when I'm done with the for loop.
All you are saying is personal taste and familiarity. Nothing wrong with that but I could argue every one of your points exactly the other way and would be as right as you are.
Curly braces are everywhere, but they aren't used to distinguish contexts or end logical blocks, so you don't have the noise everywhere (increasing readability substantially).
Semicolons are used to logically distinguish list items. Semicolons are supported, but not required to terminate lines. This makes copy n paste easier for C# code.
Parentheses? It's a functional language... "()" is a valid value. Every lambda, tuple, parameter set, and value can be wrapped in them, and often must to be valid code.
In every case the reduction in line noise, superfluous characters, and inconsistent formatting is replaced with strict formatting requirements and strict variable definition requirements. That means better readability. It also means you can support multiline string literals and escaped variable names easily, further improving redability.
Keep in mind some founders have had careers before starting a company (average age of YC founders is like early 30s?) so they might have 10 years experience leading teams + some significant victories that came from their startup.
If someone fresh out of college just worked 5 years on their startup and then abandoned ship they probably wouldn't get a very impressive role unless their startup was a crazy fast success though.
If you interview well and have competing offers from large firms that shell out good cash, you can get that as a senior dev. Networking helps a lot, if you have the right friends working there, they'll make sure you interview with the right people.
1-2M is way above market for a "senior dev." Even for the top companies, that tier is reserved for truly outstanding performers who have launched major projects/innovations.
Yeah he said 500k. I Initially thought the same as you, 1-2mil.
500k for a senior dev is actually not too far out there. I have an L3 friend at Google (l3 is new hire level) who has been at the company for almost 2 years and who's total comp is almost 300k. So some L5s and L6s could certainly be pulling in 500k.
That link doesn't support the claim of "1/2M paycheck". L7, the first point at which there's a reported total comp over $1M, is a fairly senior position at Google. If you can walk in at L7, it probably means you've already "made it" somewhere else.
> churn out apps with a Java back-end and an Angular/React/Vue/whatever front-end
That's basically what all of us product engineers at FB do, it's just that there's so much competition for engineers here that they have to pay us well.
I think some companies tried to outsource stuff like this (Oracle, IBM) but they are slowly finding that there are real costs associated with outsourcing tech and it might be actually cheaper for the company to hire expensive developers in San Francisco but have them sitting in the same building as top management so the communication can happen in real time and engineers can fully understand business requirements rather than try to manage remote outsourced teams on the other side of the globe who have no idea what's happening at the HQ.
do reports, in general, want 1 on 1s? i certainly don't. They hold no value to me. They are largely constructed to inform managers as to what's going on, which is something I already know.
> And strangely, a lot of people think we should both do that for free (at everyone else's expense) and that we should legalize the drugs that put them there.
There are also references of the ban in Turkey and Greece in 1890 everywhere but without good sources.
The above should be enough to realize that that different nations made various drugs illegal without the US influence and without intention to oppress black panthers and communists.
I didn't do it alone of course (probably a dozen people have worked on the UI, and hundreds on the backend), but it was my main project for around 9 months. Lots of videos that people care a lot about go through there.