Ficha 01 · Vocabulary, reading, listening
- Vocabulary
- Reading
- Listening
- Translation
Part I · Vocabulary
Exercise 1 · Translate to English (15 pts)
Translate these Portuguese tech terms to English:
a) Base de dados. b) Pedido de incorporação. c) Ramo (em Git). d) Cache. e) Servidor. f) Função. g) Variável. h) Classe (em OOP). i) Pacote (de código). j) Erro de sintaxe.
a) Database. b) Pull request (PR). c) Branch. d) Cache (same). e) Server. f) Function. g) Variable. h) Class. i) Package. j) Syntax error.
Exercise 2 · Acrónimos (10 pts)
Indica o significado de cada acrónimo:
a) API. b) CRUD. c) HTTP. d) MVC. e) CI/CD.
a) API: Application Programming Interface. - Conjunto de definições e protocolos para construir e integrar aplicações.
b) CRUD: Create, Read, Update, Delete. - Operações básicas em bases de dados / aplicações.
c) HTTP: HyperText Transfer Protocol. - Protocolo de comunicação para web (cliente-servidor).
d) MVC: Model-View-Controller. - Padrão de arquitectura que separa lógica, apresentação e controlo.
e) CI/CD: Continuous Integration / Continuous Deployment. - Práticas que automatizam build, testes e deploy de software.
Exercise 3 · Job titles (10 pts)
Match Portuguese with English job titles:
| Portuguese | English |
|---|---|
| Programador sénior | A. Tech Lead |
| Líder técnico | B. Senior Developer |
| Gestor de produto | C. DevOps Engineer |
| Engenheiro DevOps | D. Product Manager |
| Cientista de dados | E. Data Scientist |
- Programador sénior → B. Senior Developer
- Líder técnico → A. Tech Lead
- Gestor de produto → D. Product Manager
- Engenheiro DevOps → C. DevOps Engineer
- Cientista de dados → E. Data Scientist
Part II · Reading
Exercise 4 · Documentation analysis (15 pts)
Read this excerpt from API documentation:
POST /api/users
Creates a new user in the system.
Request body (JSON):
json { "email": "user@example.com", "password": "secret123", "name": "John Doe" }Response (201 Created):
json { "id": "abc-123", "email": "user@example.com", "name": "John Doe", "createdAt": "2026-05-22T10:00:00Z" }Errors: - 400 Bad Request: invalid email format or missing fields. - 409 Conflict: email already exists.
Answer: a) What HTTP method is used? b) What is the URL path? c) What does status 201 mean? d) What happens when you send invalid email? e) What field is returned that you didn't send?
a) HTTP method: POST.
b) URL path: /api/users.
c) Status 201 Created: a new resource was successfully created. (Different from 200 OK which is general success.)
d) Invalid email → returns 400 Bad Request with error message about invalid email format.
e) Field returned that wasn't sent: id ("abc-123") and createdAt (timestamp). These are generated by the server.
Note: in REST APIs, common practice is: - POST to create. - GET to read. - PUT/PATCH to update. - DELETE to delete.
Status codes: - 2xx = success. - 3xx = redirect. - 4xx = client error. - 5xx = server error.
Exercise 5 · Error messages (10 pts)
For each Python error message, explain in Portuguese what happened:
a) NameError: name 'x' is not defined
b) TypeError: unsupported operand type(s) for +: 'int' and 'str'
c) IndexError: list index out of range
d) FileNotFoundError: [Errno 2] No such file or directory: 'data.csv'
e) KeyError: 'username'
a) NameError: tentaste usar uma variável que não existe (não foi definida antes).
- Exemplo: print(x) quando x nunca foi atribuído.
b) TypeError: tentaste somar inteiro com string, o que não é permitido.
- Exemplo: 5 + "3" em vez de 5 + 3 ou 5 + int("3").
c) IndexError: tentaste aceder a posição que não existe numa lista.
- Exemplo: lista tem 3 elementos (índices 0, 1, 2), e tentaste lista[5].
d) FileNotFoundError: tentaste abrir ficheiro que não existe no caminho indicado. - Verificar nome, caminho, e se ficheiro existe.
e) KeyError: tentaste aceder a chave que não existe num dicionário.
- Exemplo: dict["username"] quando dict = {"name": "João"}.
Pattern para resolver: 1. Ler o erro com calma. 2. Identificar o tipo de erro. 3. Olhar para linha indicada. 4. Verificar o que está errado nessa linha. 5. Pesquisar Stack Overflow se necessário.
Part III · Listening (transcripts)
Exercise 6 · Standup analysis (15 pts)
Read this standup transcript:
"Hi everyone. Yesterday I finished implementing the user profile feature. I added the API endpoint, the database migration, and the frontend form. I also wrote unit tests with 90% coverage.
Today I'll start working on the password reset functionality. I'll begin with the backend, specifically the email service integration.
I'm blocked on the email template — I need the design team to provide the HTML mockup. Sarah, could you help me get that today?"
Answer: a) What did the person accomplish yesterday? b) What's the plan for today? c) What's the blocker? d) Who is being addressed in the last sentence? e) What technique is being used to manage the standup?
a) Accomplished yesterday: - Finished the user profile feature. - Added the API endpoint. - Created the database migration. - Built the frontend form. - Wrote unit tests with 90% coverage.
b) Plan for today: - Start working on password reset functionality. - Begin with backend, specifically email service integration.
c) Blocker: - Needs HTML mockup for email template from design team.
d) Addressed in last sentence: Sarah (a member of the design team).
e) Technique used: Daily standup (Scrum). - Following the standard format: Yesterday / Today / Blockers. - Specific blocker identified with person who can help. - Action-oriented and brief.
This is a good standup because: - Specific about accomplishments (not vague "I worked"). - Concrete plans for today. - Explicit blocker with person who can unblock. - Direct request to the right person.
Part IV · Writing
Exercise 7 · Bug report (15 pts)
You discovered this bug: - App: e-commerce website. - Bug: when adding an item to the cart, the total amount sometimes shows wrong (off by 1 cent). - Happens with discounted items. - Browser: any.
Write a bug report in English:
Title: [BUG] Cart total shows incorrect amount for discounted items (off by 1 cent)
## Environment
- Application: E-commerce website (production)
- App version: 3.2.1
- Browsers tested: Chrome 118, Firefox 119, Safari 17
- OS: macOS, Windows, iOS, Android
- User accounts: any (both logged in and guest)
## Steps to reproduce
1. Navigate to a product with a discount (e.g., 10% off)
2. Add the product to the cart
3. Open the cart and check the displayed total
4. Manually calculate the expected total (price × (1 - discount))
5. Compare displayed vs. expected
## Expected behavior
Cart total should match the sum of: each item price after discount, multiplied by quantity.
Example: item priced at 19.99 EUR with 10% discount, quantity 1.
Expected total: 19.99 × 0.9 = 17.991 EUR → rounded to 17.99 EUR.
## Actual behavior
Cart total displayed: 18.00 EUR (off by 0.01 EUR / 1 cent).
This appears to happen due to incorrect rounding logic.
Sometimes the cart shows 17.99 (correct), other times 18.00 (incorrect).
## Frequency
Intermittent. Occurs approximately 30% of the time with discounted items.
Does NOT occur with non-discounted items.
## Screenshots
[Attach screenshot showing:
1. Product page with original price and discount
2. Cart page with incorrect total]
## Console logs
2026-05-22 14:32:15 [cart-service] Calculating total for cart abc-123 2026-05-22 14:32:15 [cart-service] Item: 19.99 * 0.9 = 17.991 2026-05-22 14:32:15 [cart-service] Rounded total: 18.00 <-- Should be 17.99
## Severity
- [ ] Critical
- [x] High (impacts revenue and customer trust)
- [ ] Medium
- [ ] Low
## Reproducibility
- [x] Always
- [ ] Sometimes
- [ ] Rarely
- [ ] Cannot reproduce
(Note: "Sometimes" with discounted items, but consistent pattern)
## Workaround
None currently. Customers may notice the discrepancy when paying.
## Additional notes
This bug has implications for:
- Customer trust (visible incorrect math)
- Accounting reconciliation
- Tax calculations (if cascading effect)
Suggested investigation:
- Check rounding function in CartService.calculateTotal()
- Likely using Math.round() instead of correct banker's rounding
- Consider using a Decimal library for currency calculations
## Related
- Possibly related to issue #234 (price display issue)
- Original code change: PR #567 (added discount feature)
Características de bom bug report: - Título descritivo com [BUG] prefix. - Ambiente detalhado. - Steps to reproduce numerados. - Expected vs Actual behavior claros. - Severity indicada. - Reproducibility (always/sometimes). - Logs se disponíveis. - Screenshots mencionados. - Workaround se existe. - Suggested investigation ajuda developer. - Related issues linkadas.
Exercise 8 · Email request (10 pts)
Write an email in English to your manager (Sarah) asking for: - Permission to attend a 3-day conference in Berlin (June 15-17). - Conference costs €1500 + €800 hotel + €400 flights. - Explain why it's valuable. - Request feedback by next Friday.
Subject: Request: Attend DevConf Berlin (June 15-17) — feedback needed by Friday
Dear Sarah,
I hope this email finds you well.
I would like to request your approval to attend DevConf Berlin from
June 15-17, 2026. This is one of the most important conferences for
backend engineers, focusing on distributed systems and microservices —
both of which are central to our current platform redesign.
## Why this would be valuable
1. **Direct learning**: keynotes from engineers at companies like
Netflix, Spotify, and Uber, all of whom are tackling problems
similar to ours (specifically around event-driven architectures).
2. **Skill development**: workshops on Kafka and Event Sourcing,
which align perfectly with our roadmap for Q3.
3. **Networking**: opportunity to connect with potential candidates
for our open Senior Backend Engineer position.
4. **Knowledge sharing**: I commit to presenting key learnings
at our next team meeting and writing 2-3 blog posts for
the engineering blog.
## Costs breakdown
| Item | Cost |
|---|---|
| Conference ticket | €1,500 |
| Hotel (3 nights) | €800 |
| Flights (Lisbon-Berlin return) | €400 |
| **Total** | **€2,700** |
This falls within the annual learning budget of €3,000 per engineer.
## Time off
I would be away June 15-17 (3 working days). I can ensure proper
handover of my current responsibilities before leaving and remain
available by email for urgent matters.
Could you please let me know your decision by next Friday (May 30)?
This is the deadline for early-bird registration, which would save
us approximately €300.
I'm happy to discuss this further in person if you have questions.
Thank you for considering this request.
Best regards,
João Silva
Senior Backend Engineer
+351 200 000 000
joao.silva@company.pt
Características de bom email de pedido:
- Subject específico com:
- Tipo (Request)
- Topic (Conference)
- Date
-
Deadline (feedback by Friday)
-
Saudação profissional.
-
Estrutura clara com seções:
- Pedido inicial (1-2 frases).
- Justificação detalhada.
- Custos (tabela).
- Implicações (tempo).
-
Próximos passos.
-
Justificação business:
- Não pessoal ("quero ir") mas profissional ("valuable for company").
- Conexão com objectivos actuais (platform redesign).
-
Commitments (knowledge sharing).
-
Custos transparentes:
- Detalhados.
-
Comparados com orçamento existente.
-
Antecipação de objecções:
- Cobertura durante ausência.
-
Disponibilidade remota.
-
Call to action específico:
- Decisão por data específica.
-
Razão (early-bird deadline).
-
Despedida profissional.
-
Assinatura completa.
Não fazer: - ❌ "Estou interessado em ir a uma conferência" (vago). - ❌ "Vai ser muito útil para mim" (egocêntrico). - ❌ "Quando precisas de saber?" (sem antecipação). - ❌ Email demasiado longo (max 1 página). - ❌ Demasiados anexos (manter no email principal).