”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 我们现在是全栈开发者了

我们现在是全栈开发者了

发布于2025-04-13
浏览:619

ooooops I guess we’re* full-stack developers now

*By "we're," I mean front-end developers.

This is a written version of a 2019 Jamstack Conf London presentation, created after an unfortunate mountain biking accident prevented my attendance. I'm republishing it here for archival purposes and to showcase WordPress Gutenberg's capabilities.

? Hello! My career has been dedicated to front-end development and helping others excel in this field.

And boy, are my arms tired.

I manage CSS-Tricks (recently celebrating its 12th anniversary), a website dedicated to web development resources.

I also co-founded CodePen, a social coding platform for front-end technologies.

Additionally, I co-host the ShopTalk Show podcast, nearing its 400th episode.

Through these experiences, I've interacted with countless developers, gaining valuable insights into the industry and the multifaceted nature of website creation.

Defining the Front-End Developer Role

✅ It's a job title and a recognized profession.

This isn't just semantics; it's a real job with associated employment and titles. Financial compensation underscores its importance.

However, how we define this role and its expectations is subjective.

Browse any tech job board, and you'll find numerous postings for front-end developers.

Defining the Front-End Developer Role (continued)

✅ Direct interaction with browsers, devices, and users.

While many web professionals use browsers daily, front-end developers live within them, utilizing DevTools and testing across various browsers, versions, and platforms.

Crucially, they prioritize the user experience, including accessibility considerations.

Mina Markham provides a high-level explanation of the front-end developer role: [Insert Markham's quote here if available].

A distinction exists from back-end developers; it's not that back-end developers disregard users, but rather that responsibilities are distributed.

Monica Dinculescu aptly states: [Insert Dinculescu's quote here if available].

The browser is central to front-end development. If your focus is on how things appear and function in a browser, that's front-end development. It's more challenging than often acknowledged.

Defining the Front-End Developer Role (continued)

✅ Reliance on HTML, CSS, and JavaScript, despite a wide array of tools.

These are the fundamental languages browsers understand. While other technologies are involved, the core deliverable resides in these languages, and front-end developers are accountable for this.

Proficiency levels vary; some developers may write minimal JavaScript, while others focus heavily on it. This leads to a fascinating divide.

My article, "The Great Divide," explores this dichotomy: [Insert link to article if available].

This isn't a singular viewpoint; numerous developers acknowledge this split.

Brad Frost introduces "Front of the Front" and "Back of the Front" to categorize this division. He highlights that this diversity is a strength.

At Google, this distinction is recognized and reflected in job titles, with equal compensation for both career paths.

JavaScript's prominence since 2015 is undeniable.

(For larger views, use DevTools. You're front-end developers, right?)

Our roles are inherently fascinating! We all interact with browsers, users, and devices. However, our expertise and contributions differ significantly.

Some specialize in design, photography, legal aspects, performance optimization, accessibility, or social media.

Metaphorically, we can visualize this as a branching tree. [Insert tree diagram here if available].

This metaphor may not be perfect, but it illustrates the division. We share fundamental skills but branch out into diverse areas of expertise. One branch focuses heavily on JavaScript and "Back of the Front" tasks, while the other doesn't.

Since this discussion centers on the expanding role of front-end developers into full-stack work, let's focus on those with stronger JavaScript skills.

The Shifting Landscape of Web Development

Back-End Tasks Shifting to JavaScript

Many tasks previously considered back-end responsibilities are now handled within the JavaScript realm.

Component-Driven Design and Development

Thanks, JavaScript!

Non-JavaScript server-side rendered projects rarely embraced components (exceptions exist, but consider the vast PHP CMS and Ruby on Rails landscapes). While templates and includes existed, they pale in comparison to true component-driven development.

Interestingly, despite disagreements among JavaScript frameworks, the concept of components is universally accepted. Even native web components reflect this.

Let's examine CodePen (primarily React-powered). Even a small SVG icon is a component. We call it an component because it abstracts away useful aspects.

Pairing an icon with a number is another component due to its repeated pattern and potential interactive functionality.

A row of MetaItem components might become a component, along with other display aspects of an item.

Consequently, the entire item becomes a component.

These are visual and functional abstractions for UI construction. Semantic HTML underpins them, but these abstractions are custom building blocks.

Larger sections become components. A grid of items becomes a component to manage layout and pagination.

Designers often work this way in tools like Figma, Sketch, and Adobe XD using "symbols," conceptually similar to components.

Many developers understand components readily.

Site-Level Architecture/Routing

Back-End Tasks Shifting to JavaScript (continued)

URL handling and site structure were traditionally back-end concerns. Now, "routing" is increasingly a front-end responsibility.

[Insert code snippet here]

In CodePen's UI, componentization extends beyond the grid; everything becomes a component: tabs, titles, buttons, forms, menus, and the sidebar.

Ultimately, the entire page becomes a component, effectively transforming the URL into a component.

All URLs become components, granting control over the entire site.

This architectural responsibility is substantial. Consider the existing front-end workload; it doesn't disappear; it expands. This explains the increasing prevalence of full-stack-like roles for front-end developers.

State Management, Data Acquisition, and Manipulation

Back-End Tasks Shifting to JavaScript (continued)

State management, central to most JavaScript frameworks, resolves many past front-end spaghetti problems.

However, state often relies on data acquisition, now frequently a front-end responsibility. Updating and sending data back to servers adds further complexity.

GraphQL offers a powerful solution. Its value varies, but for me, it's about empowerment.

With a robust GraphQL endpoint and tools like Apollo, front-end developers can access any data needed for UI construction.

[Insert GraphQL query code snippet here]

Note that data fetching and asynchronous handling are managed within the component. Should a skeleton, spinner, or delayed rendering be used? How are errors and timeouts handled?

Data manipulation and sending updates back through GraphQL mutations are also handled.

[Insert GraphQL mutation code snippet here]

Mutations are not significantly more complex than queries, but this adds to the front-end developer's workload – tasks previously handled on the back end.

These examples illustrate GraphQL via Apollo Client in React.

Regarding components, queries, mutations, and styling, let's consider co-locating styling information.

Front-end developers always managed styling, but within self-contained components, co-locating styling makes sense.

Here, CSS modules scope styles to specific components. Global styles and Sass for abstractions are still used.

[Insert CSS module code snippet here]

[Insert code snippet showing import of styles]

Componentization and co-location result in folders containing logic, view templates, queries, mutations, and styling.

This is convenient and has positive side effects. JavaScript bundles contain only what's needed (code splitting). Styling doesn't bloat; when components are unused, their styles are removed. Naming is simplified due to file-scoped naming.

The GraphQL documentary is insightful. Kyle Mathews (around 20:24) discusses React's impact on front-end problems and GraphQL's similar effect.

While not suitable for all projects, this approach is beneficial for large, complex applications.

Existing Front-End Responsibilities:

  • Design implementation
  • System integration of design
  • Accessibility considerations
  • Performance optimization
  • Cross-browser testing
  • Cross-device testing
  • UX considerations

New Responsibilities:

  • Component-driven design
  • Site-level architecture
  • Routing
  • Data fetching
  • API interaction
  • Data mutation
  • State management

The workload significantly expands. This doesn't mean everyone must master every aspect, but these tasks fall within the front-end domain.

Peggy Rayzis discusses the broadened scope of front-end development and the increasing specialization: [Insert Rayzis quote here if available].

Many tasks have shifted from back-end to JavaScript.

The Evolving Technology Spectrum

Let's examine the technology spectrum's evolution.

LAMP (Linux, Apache, MySQL, PHP) is a significant, albeit older, stack powering many CMSs. Front-end developers in this stack are on the far end of the spectrum, minimally interacting with the stack's core technologies.

MEAN (MongoDB, Express, Angular, Node) includes Angular, a front-end framework. Front-end developers' work overlaps more with this stack.

Serverless shifts the stack further to the right. Server identity becomes less relevant; the focus is on server-side code and APIs. Front-end developers might even write serverless functions and manage APIs.

Shawn Wang termed Design Systems, TypeScript, Apollo GraphQL, and React a "STAR" app – all front-end technologies.

The technology discussion increasingly centers on the front-end developer spectrum.

Serverless Expansion of Front-End Capabilities

I created a website about serverless technologies: [Insert link to website if available].

I consider JAMstack (JavaScript, APIs, Markup) part of the serverless movement. (SHAMstack might be more accurate, tongue-in-cheek).

Here's a JAMstack site leveraging serverless technology: a site listing upcoming front-end development conferences: [Insert link to site if available].

[Insert Markdown file code snippet here]

Each conference is a Markdown file with front matter for metadata. A static site generator and flat Markdown files are a natural fit.

The site is a public GitHub repository. This is significant:

  1. The entire site is in the repo; deployment involves cloning and a single command.
  2. No logins, permissions, or credentials are needed.
  3. Content, design, and functionality are open for public contributions.

GitHub Pages could host the site, but Netlify offers significant advantages:

  • Deploy previews
  • Analytics integration
  • Programmatic image manipulation

Netlify CMS provides a UI for on-site content editing, eliminating code editing or Git. Netlify Identity simplifies authentication.

Consider a feature: a button reveals an email input form. Submitting an email triggers an email with conference details.

This requires back-end functionality. Client-side technology alone cannot send emails. APIs are used, but API keys require back-end code for secure management.

[Insert SparkPost code snippet here]

SparkPost handles email sending. Its Node.js library simplifies the process. The code is JavaScript.

How is this run? Cloud functions (AWS Lambda, Azure Functions, Google Cloud Functions) are key to serverless. Netlify uses Netlify Functions (AWS Lambda under the hood). Functions are placed in a /functions/ folder and accessed via relative URLs.

Building an entire site from front to back feels powerful.

Revisited Technology Spectrum

Operating systems and servers become less relevant. Entire products can be built without focusing on these.

Databases are less critical; data interaction often occurs through APIs (Headless CMSs like Contentful, API-focused tools like FaunaDB, or on-page libraries like Firestore).

The technology spectrum allows interaction with all parts.

Full-Stack Capabilities

Adding:

  • Git proficiency
  • Testing skills
  • Design capabilities
  • Build process knowledge
  • Performance awareness
  • Accessibility expertise
  • Deployment pipeline setup

?
You're Gosh
Danged Right
A Full-Stack
Developer!

However,

The skillset is vast.

Specialization is possible and likely.

"Actual" unicorns (those proficient in all aspects of website building) are rare.

Back-end developers remain crucial; website complexity necessitates their expertise.

CodePen's issue tracker reveals tasks I can't handle alone; back-end support is essential. I can consider myself full-stack, but back-end skills are my weak points.

The reality often resembles this: [Insert diagram showing partial overlap of front-end and back-end skills here].

Or, in my case: [Insert diagram showing even less overlap, highlighting areas of weakness].

This isn't meant to be derogatory; it's a metaphor. We are the whole horse or dragon, but with rough edges.

It's exciting that technology allows us to encompass the entire process. Concerns arise when complexity raises the barrier to entry. However, it's also encouraging when technology simplifies the process, enabling individuals to build things independently.

Remember that quality is everyone's responsibility.

  • Good UX
  • Good performance
  • Good security
  • Good accessibility
  • Ethical treatment of users

Even if not directly involved in code affecting these aspects, advocate for their proper handling.

CodePen PRO (support your local artisanal craft software products)

最新教程 更多>
  • 如何在Java中正确显示“ DD/MM/YYYY HH:MM:SS.SS”格式的当前日期和时间?
    如何在Java中正确显示“ DD/MM/YYYY HH:MM:SS.SS”格式的当前日期和时间?
    如何在“ dd/mm/yyyy hh:mm:mm:ss.ss”格式“ gormat 解决方案: args)抛出异常{ 日历cal = calendar.getInstance(); SimpleDateFormat SDF =新的SimpleDateFormat(“...
    编程 发布于2025-07-10
  • 如何使用Python有效地以相反顺序读取大型文件?
    如何使用Python有效地以相反顺序读取大型文件?
    在python 中,如果您使用一个大文件,并且需要从最后一行读取其内容,则在第一行到第一行,Python的内置功能可能不合适。这是解决此任务的有效解决方案:反向行读取器生成器 == ord('\ n'): 缓冲区=缓冲区[:-1] ...
    编程 发布于2025-07-10
  • C++中如何将独占指针作为函数或构造函数参数传递?
    C++中如何将独占指针作为函数或构造函数参数传递?
    在构造函数和函数中将唯一的指数管理为参数 unique pointers( unique_ptr [2启示。通过值: base(std :: simelor_ptr n) :next(std :: move(n)){} 此方法将唯一指针的所有权转移到函数/对象。指针的内容被移至功能中,在操作...
    编程 发布于2025-07-10
  • 版本5.6.5之前,使用current_timestamp与时间戳列的current_timestamp与时间戳列有什么限制?
    版本5.6.5之前,使用current_timestamp与时间戳列的current_timestamp与时间戳列有什么限制?
    在时间戳列上使用current_timestamp或MySQL版本中的current_timestamp或在5.6.5 此限制源于遗留实现的关注,这些限制需要对当前的_timestamp功能进行特定的实现。 创建表`foo`( `Productid` int(10)unsigned not n...
    编程 发布于2025-07-10
  • 如何实时捕获和流媒体以进行聊天机器人命令执行?
    如何实时捕获和流媒体以进行聊天机器人命令执行?
    在开发能够执行命令的chatbots的领域中,实时从命令执行实时捕获Stdout,一个常见的需求是能够检索和显示标准输出(stdout)在cath cath cant cant cant cant cant cant cant cant interfaces in Chate cant inter...
    编程 发布于2025-07-10
  • 为什么我会收到MySQL错误#1089:错误的前缀密钥?
    为什么我会收到MySQL错误#1089:错误的前缀密钥?
    mySQL错误#1089:错误的前缀键错误descript [#1089-不正确的前缀键在尝试在表中创建一个prefix键时会出现。前缀键旨在索引字符串列的特定前缀长度长度,以便更快地搜索这些前缀。理解prefix keys `这将在整个Movie_ID列上创建标准主键。主密钥对于唯一识别...
    编程 发布于2025-07-10
  • Python环境变量的访问与管理方法
    Python环境变量的访问与管理方法
    Accessing Environment Variables in PythonTo access environment variables in Python, utilize the os.environ object, which represents a mapping of envir...
    编程 发布于2025-07-10
  • 如何为PostgreSQL中的每个唯一标识符有效地检索最后一行?
    如何为PostgreSQL中的每个唯一标识符有效地检索最后一行?
    postgresql:为每个唯一标识符在postgresql中提取最后一行,您可能需要遇到与数据集合中每个不同标识的信息相关的信息。考虑以下数据:[ 1 2014-02-01 kjkj 在数据集中的每个唯一ID中检索最后一行的信息,您可以在操作员上使用Postgres的有效效率: id dat...
    编程 发布于2025-07-10
  • 如何从Google API中检索最新的jQuery库?
    如何从Google API中检索最新的jQuery库?
    从Google APIS 问题中提供的jQuery URL是版本1.2.6。对于检索最新版本,以前有一种使用特定版本编号的替代方法,它是使用以下语法:获取最新版本:未压缩)While these legacy URLs still remain in use, it is recommended ...
    编程 发布于2025-07-10
  • Python高效去除文本中HTML标签方法
    Python高效去除文本中HTML标签方法
    在Python中剥离HTML标签,以获取原始的文本表示Achieving Text-Only Extraction with Python's MLStripperTo streamline the stripping process, the Python standard librar...
    编程 发布于2025-07-10
  • 如何在鼠标单击时编程选择DIV中的所有文本?
    如何在鼠标单击时编程选择DIV中的所有文本?
    在鼠标上选择div文本单击带有文本内容,用户如何使用单个鼠标单击单击div中的整个文本?这允许用户轻松拖放所选的文本或直接复制它。 在单个鼠标上单击的div元素中选择文本,您可以使用以下Javascript函数: function selecttext(canduterid){ if(do...
    编程 发布于2025-07-10
  • Go语言垃圾回收如何处理切片内存?
    Go语言垃圾回收如何处理切片内存?
    Garbage Collection in Go Slices: A Detailed AnalysisIn Go, a slice is a dynamic array that references an underlying array.使用切片时,了解垃圾收集行为至关重要,以避免潜在的内存泄...
    编程 发布于2025-07-10
  • Spark DataFrame添加常量列的妙招
    Spark DataFrame添加常量列的妙招
    在Spark Dataframe ,将常数列添加到Spark DataFrame,该列具有适用于所有行的任意值的Spark DataFrame,可以通过多种方式实现。使用文字值(SPARK 1.3)在尝试提供直接值时,用于此问题时,旨在为此目的的column方法可能会导致错误。 df.withCo...
    编程 发布于2025-07-10
  • 如何在GO编译器中自定义编译优化?
    如何在GO编译器中自定义编译优化?
    在GO编译器中自定义编译优化 GO中的默认编译过程遵循特定的优化策略。 However, users may need to adjust these optimizations for specific requirements.Optimization Control in Go Compi...
    编程 发布于2025-07-10
  • 为什么HTML无法打印页码及解决方案
    为什么HTML无法打印页码及解决方案
    无法在html页面上打印页码? @page规则在@Media内部和外部都无济于事。 HTML:Customization:@page { margin: 10%; @top-center { font-family: sans-serif; font-weight: bo...
    编程 发布于2025-07-10

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3