1,053 karma · joined December 6, 2010
South African temporarily in the Bay Area 2011-2015, Seattle 2016-.
Formerly tech lead and first employees at startups Yola (2007-2010) and KnowledgeTree (2004-2006).
Contacting/following me:
fb.me/nbm @nxsy on twitter Email: HN username at nxsy dot org
I'm not sure I can express my skepticism about this enough - our security, safety, and site integrity teams are some of the most privacy-conscious people I know, and even a hint of something like this happening here would lead to very pointed questions asked at the weekly Q&A every week until it was resolved.
I worked with the team that fight spam, scams, and the fake accounts that distribute them when I started at Facebook, and they expend a lot of time writing code and building machine learning models to detect fake accounts. There would be no fake accounts if there wasn't a massive financial upside to it, and so they do the strangest things to try avoid the detection.
You can read a bit about what the team does at http://research.microsoft.com/en-us/projects/ldg/a10-stein.p...
I ask because I've never heard anything like that, despite working with the teams that build tools to fight spam, scams, fake accounts, and to assist the User Operations team to handle reports from people who encounter harassment, bullying, and other anti-social or criminal activity.
In terms of the "Like" button and other social plugins, unfortunately there's not all that much to be done about the way the technologies in the web works. Facebook came up with this "widget" that provided way more value to people than the equivalent buttons from Digg, Delicious, and several others, many of which encourage integration that uses resources stored on a central server which could allow tracking even without clicking on them. Many of these widgets need to talk to a server anyway - to provide credibility and popularity by showing how many people have liked the content. However, the "Like" button needs to talk to a server to provide its additional value - to show you a list of your friends who have also liked this content.
I encourage you to read the Facebook Data Use Policy, especially the section about "Social plugins" under "Other websites applications", and the link through to the Help Center that gives even more information about how that data is and is not used.
Do you mean that advertisers pay to get information like your name, email address, street location, and other identifiable information about you, like in a huge spreadsheet?
Or do you mean that advertisers can pay money to have their adverts displayed to the sorts of people who most likely will be interested in them but receive no personal data, as explained at https://www.facebook.com/about/ads/ ?
While I get that some people like to make it sound more dramatic by saying "sell your personal data to advertisers" while understanding how it works, it's also common that people just don't understand.
It sounds like you have accepted some friend requests from some noisy/energetic people, and/or from people that you perhaps don't really care about. My experience is that unfriending people I don't actually care about (people I've only interacted with a few times a long time ago, for example), making a close friends list (people I care a lot about), and moving the 25%-ish people I care the least about to the acquaintance list has improved my experience a lot.
There are always some unusual cases - a cousin you mostly want to hear things from/about who loves all sorts of games, maybe. For those special cases, you can also control specifically that you don't want to hear from them about games.
I'm not really familiar with problems with events - I get a few event invites a month, and generally they are things I'm interested in going to. How many events are you being invited to? How many different people are involved in inviting you to them?
If you're using Windows, you could also try out the Facebook Messenger app to keep yourself on chat.
(I work at Facebook, but on infrastructure, not products.)
They are for things like for a bowling team in a league or a user group or other ad-hoc group of people who want to communicate with each other - co-ordinate dates and times, send out last-minute updates. The hope, as I understand it, is that it will reduce confusion/anxiety/overcommunication over who hasn't yet read something ("Did Mike read the update that mentioned he is supposed to bring the projector? Should I send him a direct message/phone him?").
Pages already have Insights which gives them aggregate-only demographic data about the audience who has interacted with a particular post ("52/48% female/male, 80% US, ...").
(A Facebook engineer, but not involved in this feature.)
There is a lot of good code to look at and learn from, and the Bootcamp program teaches a bunch of our own library and some guidance on what good and bad standard library functions are for certain cases. We also have a "newbie" group where people can ask questions about the codebase. And if you do something without knowledge of a built-in (or Facebook) function/class and make things more complex than they need to be, your code reviewer will let you know how to do it easier/more idiomatically. Every once in a while there are language tech talks, and sometimes even whole-day training sessions (we did one on exciting new C++11 features).
Besides that, I definitely spent a lot of my time with php.net/function_name open and exploring when I couldn't remember all the functions available or the parameters and order.
Facebook isn't trying to move away from PHP as quickly as possible. For years, there have been PHP components (primarily web front-end rendering, aggregation/ranking of data from various sources) and C++ components (primarily high-performance back-end services) and other languages like Python (primarily non-production-path/operations back-end services) and Java (primarily Hadoop-related technologies like Hive and HBase, and services that are heavy users of such), and nothing groundbreaking has changed in this.
New hires use PHP or C++ or whatever language (and often multiple languages) necessary to work on the team and projects they choose to work on. New projects use the languages that make the most sense.
Almost all web front-end work involves PHP - the frameworks and libraries and runtime environment are well-developed, well-tested, well-documented, and well-known.
In terms of HipHop for PHP, the question to ask is: What language could have allowed quick low-barrier-to-entry web-app-centric development in the early days while still delivering the sort of runtime efficiency demanded by the environment? Languages like Python and Ruby may arguably allow the first (but remember we're talking about early 2004 here, so Ruby on Rails was not out, and neither were Django, Flask, and so forth and WSGI had just come out), but would have required a "HipHop for PHP"-style solution as well. Languages like C, C++, and Java may have the runtime efficiency, but it would be a hard argument to say they're as developer-time-efficient as PHP (especially back then).
That's a slightly different question to what one should do today if starting a new venture. And _that_ is also a different question to what Facebook should do today - HipHop for PHP exists, and is delivering performance/runtime efficiency that most languages people mention as an alternative do not. And, the PHP frameworks and libraries and runtime environment exist and allow rapid development of production code. It's actually reasonably pleasant to develop for with those in place.
The HipHop for PHP team is small, but have huge leverage - this small team of reasonably hardcore low-level C++ programmers are making a whole bunch (hundreds?) of PHP developers way more productive (since they don't have to use a relatively slower-to-develop-in language/runtime like C++), and also makes the cost of operating the site go down by making that code more efficient and reducing the number of servers needed.
You can either increase the resource (upgrading CPU, adding memory), or use the resource in a different way/trade off one resource against another. For example, compressing data before network or disk I/O might be useful if you have spare CPU. Once you've done that, you may now be bound by something else - maybe available memory. If you have spare resources (CPU, for example), you can then choose to use fewer/less powerful resources in that space if it makes economic sense.
You can also talk about response time being bound by something - disk seek time, network latency, memory latency, and so forth. That affects how fast something can respond, and while that figures into how much work a server can do (per-thread/request memory usage), it doesn't generally largely affect how many machines you have to buy or their configuration (unless you have low-latency options).
The grace/confidence in admitting they don't know, the willingness to guess and explain how they came up to it (and continuing/iterating as I give more information), and how well someone integrates something new (ie, something I have just told them) later in the interview are all major considerations in my interview feedback and hire/no-hire decision.
Some other languages might allow you to do certain operations in the front-end more easily, but the way to approach it when using PHP might be to delegate that to a back-end service in another language. Similarly, some languages might allow you to write both most front-end and most back-end software in the same language, where PHP might be wholly unsuitable or makes certain things harder to achieve than it is worth using it for (maybe strict memory usage control, maybe where you're looking for CPU cache wins).
The Facebook front-end code is largely just the PHP language (modulo things like XHP) and follows the shared-nothing, request-based architecture that people who program in PHP expect. With the right abstractions and code organisation, it is fairly clean and understandable even at the relatively large size (even if I'm not generally a fan of the language and would almost certainly not make the decision to use it today).
It is somewhat less interesting whether the PHP runtime is as efficient as it can be. Partly because one can use an alternative runtime like HipHop for PHP if you want to. And partly because very few people have to worry quite as much about performance/efficiency that comes with a large capital/operational cost where you have hundreds of servers.
So while "But Facebook uses PHP so it must be good" is not the best argument, neither is fighting it with "But Facebook reimplemented it!".
From what I understand, Yahoo! has a similar mix of technologies.
In both cases, you really can't say "are PHP".
(1) Modulo some in-house and open source extensions (like XHP) running on HipHop for PHP.
Most back-end services (ie, the systems that build your feed, or detect spam) are in C++. Java is used in some back-end services (including, for example, in Hadoop, Hive, HBase, and the messaging product) and for the Android app. Objective C is used for the Facebook app, Messenger, Camera, and so forth on iOS. Python is used primarily in the automation and operations space. You will also find a bunch of Ruby, Haskell, Scala, and so forth around.
I am not generally a fan of PHP and much of the ecosystem around it, but using it at Facebook is very different. I also would not say that time spent learning and using PHP is time wasted - the important things to learn typically transcend language, and learning anti-patterns / deficiencies is useful too. That is also why Facebook does not expect any particular language knowledge before you start/when you interview.
(I am an engineer/developer/whatever at Facebook, and I'm always interested in hearing the perception of the company's technology from the community.)
An advertiser once, against the FB terms of service, used a user's profile picture in their advertising. The advertiser was banned from the platform. Here's a news story that might jog your memory on this: http://mashable.com/2009/07/17/facebook-dating-ads-2/
The message is that the company is going to make it easy to work on and focus on the particular high-priority projects you are involved in by increasing the rate and operating hours for shuttles and kitchens, and making it even more culturally acceptable (and even dutiful) to avoid distractions like meetings, lower-priority projects, and so forth. Obstacles to getting work done, whether during usual office hours (which are already not that usual) or not, are reduced or removed.
For me, the lockdown concept gave me an opportunity to consider working on more important things than the things that just happened to be in my tasks list, my appointment calendar, what people in team meetings thought was important, and so forth. Lower-value meetings started happening less frequently or being indefinitely postponed. In terms of time, I think I ended up working less at the end of lockdown than I did before it started.
It isn't a complex rating system - there are probably 97% of people at the base karma level, maybe 0.1% at one rung higher, 2.7% at one rung lower, and 0.2% at lower than that. The "Push" tech talk at https://www.facebook.com/video/video.php?v=10100259101684977 has more on it.
Mostly it is a way of letting you know that you made people's lives difficult by holding up the push process by not being available to support your changes. You know that you won't get away with that, that you need to make up for it, and you also know when you've made up for it.
(It also doesn't apply to a decent number of engineers, since they work on services and infrastructure that are not part of that process.)
What real-world problems do you see staring Facebook in the face in its continued usage of PHP? I'm no PHP fan, but many of the common PHP problems are avoided or mitigated in the code base.
IRC's ability to quickly create temporary groups, temporary membership (essentially muting discussion by leaving, or peeking by joining), bot frameworks, and multiple clients are potential reasons why IRC might be preferable for the sort of things it is used for, I guess.