Emir
New member
Ayşe bu noktada konuşmaya katıldı.
"Teknolojiler geliştikçe araçlara erişmek kolaylaşıyor. Fakat herkesin aynı imkânlara sahip olduğunu düşünmemeliyiz. İyi bir bilgisayara, ücretli eğitimlere veya deneyimli bir mentora erişimi olmayan insanlar da var. Bu nedenle öğrenme yollarını gereksiz yere zorlaştırmamak önemli."
Kerem de kendi açısından ekledi:
"Doğru. Ama öğrenme yolunu kısaltmak, temel kavramları tamamen atlamak anlamına gelmemeli. Bence amaç, gerekli bilgiyi doğru zamanda öğrenmek."
Bu konuşma Mert'in düşüncesini değiştirdi. Artık React'i öğrenmek zorunda olup olmadığını değil, onu ne kadar ve hangi sırayla öğrenmesi gerektiğini soruyordu.
4. Bölüm: İlk Hata, İlk Gerçek Ders
Mert sonunda kendi uygulamasını geliştirmeye başladı. İlk hedefi oldukça basitti: İnsanlar ihtiyaç fazlası eşyalarını listeleyebilecek, diğer kullanıcılar da bu eşyalara ilgi gösterebilecekti.
İlk ekranda bir başlık, birkaç eşya kartı ve bir buton vardı. Ardından kartlara tıklanınca ayrıntı ekranının açılmasını istedi.
İnternette bulduğu bir örneği düzenleyerek işe koyuldu. Fakat kısa süre sonra sorunlar ortaya çıktı. Bir bileşene gönderdiği özellikler beklediği gibi çalışmıyor, bazı durumlarda ekrandaki veriler güncellenmiyor ve bir fonksiyonun neden yeniden çalıştığını anlayamıyordu.
Sinirlenip projeyi bırakmayı düşündü.
Ertesi gün Kerem'le görüştüğünde sorunun önemli bir kısmının React'in temel kavramlarından kaynaklandığını fark etti. Özellikle props ile state arasındaki farkı yeterince anlamamıştı.
Kerem örnek verdi:
"Bir eşyanın adını, açıklamasını ve fotoğrafını bir kart bileşenine gönderiyorsan bunlar props olabilir. Ama kullanıcı o eşyayı favorilerine eklediğinde ekranda değişmesini istediğin bir bilgi varsa bunu state ile yönetmen gerekebilir."
Mert, bileşenler arasındaki veri akışını yeniden düzenledi. Daha sonra useState kullanarak favori durumunu yönetmeyi öğrendi.
Örneğin:
JavaScript
```
import React, { useState } from 'react';
import { View, Text, Button } from 'react-native';
export default function FavoriteExample() {
const [favorite, setFavorite] = useState(false);
return (
{favorite ? 'Favorilerimde' : 'Henüz favorilerimde değil'}
setFavorite(!favorite)}
/>
);
}
```
Bu kez kodun her satırını anlamaya çalıştı. useState değerini ve bu değeri değiştiren fonksiyonu tanıdı. Butona basıldığında durumun değiştiğini, bileşenin yeni duruma göre yeniden görüntülendiğini gördü.
Küçük bir özellikti ama Mert için büyük bir adımdı. Çünkü artık yalnızca çalışan bir kod elde etmiyor, kodun neden çalıştığını da anlıyordu.
Ayşe ise uygulamayı başka bir açıdan değerlendirdi. Favorilere ekleme işleminin kolay bulunup bulunmadığını, butonun anlaşılır olup olmadığını ve kullanıcıların bir işlem yaptıklarında yeterli geri bildirim alıp almadıklarını sorguladı.
Mert başlangıçta bu ayrıntıları ikincil konular olarak görüyordu. Sonra fark etti ki teknik açıdan çalışan bir özellik, kullanıcı açısından anlaşılır veya yararlı olmak zorunda değildi.
Bu deneyim ona iki önemli ders verdi: Teknik sorunları çözebilmek için sağlam kavramlara ihtiyaç vardı; iyi bir uygulama geliştirmek içinse insanların o uygulamayla nasıl ilişki kurduğunu anlamak gerekiyordu.
5. Bölüm: Çözüm Odaklılık ve Empati Aynı Projede Buluşunca
Uygulamanın ilk sürümü hazırlandığında Mert, birkaç arkadaşından uygulamayı denemelerini istedi. Sonuçlar beklediği gibi olmadı.
Kullanıcılardan biri eşya ekleme ekranını bulamadı. Bir başkası, paylaştığı eşyanın kimler tarafından görülebildiğini anlamadığını söyledi. Bir diğeri ise bir ürünü almak isteyen kişiyle iletişim kurarken kişisel telefon numarasını paylaşmak istemediğini belirtti.
Mert'in ilk tepkisi, uygulamaya yeni özellikler eklemek oldu. Daha ayrıntılı bir menü, yeni butonlar ve farklı ekranlar tasarlamayı düşündü.
Kerem, sorunları sınıflandırmayı önerdi. Kullanıcıların hangi ekranda zorlandığını, hangi işlemin tamamlanamadığını ve hangi hataların daha sık tekrarlandığını belirlemek için bir liste hazırladı.
Ayşe ise test yapan insanlarla yeniden konuştu. Onlara yalnızca neyin çalışmadığını sormakla yetinmedi; uygulamayı kullanırken kendilerini nasıl hissettiklerini, neden bazı bilgileri paylaşmak istemediklerini ve hangi durumlarda güvensiz hissettiklerini anlamaya çalıştı.
İki yaklaşım birlikte işe yaradı.
Kerem, sorunların teknik nedenlerini araştırdı. Ayşe, kullanıcıların beklentilerini ve çekincelerini ortaya çıkardı. Mert de elde ettikleri bilgileri bir araya getirerek uygulamanın önceliklerini yeniden belirledi.
Örneğin, yeni özellikler eklemek yerine eşya paylaşma adımlarını sadeleştirdiler. Kullanıcılara hangi bilgilerin herkese açık olduğunu anlatan açıklamalar eklediler. İletişim konusunda daha kontrollü seçenekleri araştırmaya başladılar.
Burada erkeklerin çözüm odaklı, kadınların ise empatik olduğu gibi kesin bir ayrım yapmak doğru olmaz. Kerem'in sistematik yaklaşımı ile Ayşe'nin kullanıcı deneyimine gösterdiği özen, kişisel yetenekleri ve mesleki deneyimleriyle ilgiliydi. Her iki yaklaşım da cinsiyetten bağımsız olarak öğrenilebilir ve geliştirilebilir becerilerdi.
Bu hikâyede asıl önemli olan, iki bakış açısının birbirini tamamlamasıydı. Strateji, hangi sorunun önce çözülmesi gerektiğini belirlemeye yardımcı oldu. Empati ise çözümün kimin için ve hangi ihtiyaca yönelik üretildiğini görünür kıldı.
Yazılım geliştirme de tam olarak burada teknik bir faaliyetin ötesine geçiyordu. Kod, insanların hayatında bir değişiklik oluşturduğu ölçüde anlam kazanıyordu.
Siz bir uygulama geliştirirken kullanıcıların söylediklerine mi, kullanım verilerine mi, yoksa kendi teknik sezginize mi daha fazla güveniyorsunuz? Bu kaynaklardan biri diğerlerinin önüne geçtiğinde neler kaybolabilir?
6. Bölüm: Peki, React Öğrenmeden React Native Öğrenilir mi?
Mert'in hikâyesi ilerledikçe sorunun cevabı daha açık hâle geldi. Evet, React'i önceden kapsamlı biçimde öğrenmeden React Native ile uygulama geliştirmeye başlanabilir. Ancak React'in temel kavramlarını öğrenmek, özellikle uygulama büyüdükçe büyük avantaj sağlar.
Burada önemli olan, React öğrenmekten ne anlaşıldığıdır. React'in bütün ekosistemini, gelişmiş mimari yaklaşımlarını veya web uygulamalarındaki her ayrıntıyı bilmek zorunda değilsiniz. React Native'e başlamak için öncelikle ihtiyaç duyacağınız temel kavramları anlamanız yeterlidir.
Mert, öğrenme sürecini beş aşamaya ayırdı.
Birinci aşama: JavaScript temelleri
Değişkenler, veri türleri, fonksiyonlar, diziler, nesneler, koşullar, döngüler ve modüller üzerinde çalıştı. Ardından map, filter, find gibi dizi metotlarını öğrendi. Çünkü uygulamalarda eşya listeleri göstermek, verileri filtrelemek ve belirli kayıtları bulmak gibi işlemlerle sık sık karşılaşacaktı.
Ayrıca async/await, Promise yapısı ve temel hata yönetimi konularına giriş yaptı. İnternetten veri alan bir mobil uygulamada asenkron işlemleri anlamak önemliydi.
İkinci aşama: React'in temel mantığı
Bileşenlerin nasıl oluşturulduğunu öğrendi. JSX sözdizimini tanıdı. Props ile bileşenlere veri aktarmayı, state ile değişen bilgileri yönetmeyi ve olaylara tepki vermeyi denedi.
Ardından useState ve useEffect gibi temel Hooks yapılarını inceledi. Bir bileşenin neden yeniden görüntülendiğini, durum değişikliklerinin arayüzü nasıl etkilediğini ve yan etkilerin nasıl yönetildiğini anlamaya çalıştı.
Üçüncü aşama: React Native'e geçiş
Bu aşamada View, Text, Image, TextInput, Pressable ve ScrollView gibi temel bileşenlerle tanıştı. Web tarafındaki HTML ve CSS yaklaşımının mobil geliştirmede birebir aynı şekilde uygulanmadığını gördü.
"Teknolojiler geliştikçe araçlara erişmek kolaylaşıyor. Fakat herkesin aynı imkânlara sahip olduğunu düşünmemeliyiz. İyi bir bilgisayara, ücretli eğitimlere veya deneyimli bir mentora erişimi olmayan insanlar da var. Bu nedenle öğrenme yollarını gereksiz yere zorlaştırmamak önemli."
Kerem de kendi açısından ekledi:
"Doğru. Ama öğrenme yolunu kısaltmak, temel kavramları tamamen atlamak anlamına gelmemeli. Bence amaç, gerekli bilgiyi doğru zamanda öğrenmek."
Bu konuşma Mert'in düşüncesini değiştirdi. Artık React'i öğrenmek zorunda olup olmadığını değil, onu ne kadar ve hangi sırayla öğrenmesi gerektiğini soruyordu.
4. Bölüm: İlk Hata, İlk Gerçek Ders
Mert sonunda kendi uygulamasını geliştirmeye başladı. İlk hedefi oldukça basitti: İnsanlar ihtiyaç fazlası eşyalarını listeleyebilecek, diğer kullanıcılar da bu eşyalara ilgi gösterebilecekti.
İlk ekranda bir başlık, birkaç eşya kartı ve bir buton vardı. Ardından kartlara tıklanınca ayrıntı ekranının açılmasını istedi.
İnternette bulduğu bir örneği düzenleyerek işe koyuldu. Fakat kısa süre sonra sorunlar ortaya çıktı. Bir bileşene gönderdiği özellikler beklediği gibi çalışmıyor, bazı durumlarda ekrandaki veriler güncellenmiyor ve bir fonksiyonun neden yeniden çalıştığını anlayamıyordu.
Sinirlenip projeyi bırakmayı düşündü.
Ertesi gün Kerem'le görüştüğünde sorunun önemli bir kısmının React'in temel kavramlarından kaynaklandığını fark etti. Özellikle props ile state arasındaki farkı yeterince anlamamıştı.
Kerem örnek verdi:
"Bir eşyanın adını, açıklamasını ve fotoğrafını bir kart bileşenine gönderiyorsan bunlar props olabilir. Ama kullanıcı o eşyayı favorilerine eklediğinde ekranda değişmesini istediğin bir bilgi varsa bunu state ile yönetmen gerekebilir."
Mert, bileşenler arasındaki veri akışını yeniden düzenledi. Daha sonra useState kullanarak favori durumunu yönetmeyi öğrendi.
Örneğin:
JavaScript
```
import React, { useState } from 'react';
import { View, Text, Button } from 'react-native';
export default function FavoriteExample() {
const [favorite, setFavorite] = useState(false);
return (
{favorite ? 'Favorilerimde' : 'Henüz favorilerimde değil'}
setFavorite(!favorite)}
/>
);
}
```
Bu kez kodun her satırını anlamaya çalıştı. useState değerini ve bu değeri değiştiren fonksiyonu tanıdı. Butona basıldığında durumun değiştiğini, bileşenin yeni duruma göre yeniden görüntülendiğini gördü.
Küçük bir özellikti ama Mert için büyük bir adımdı. Çünkü artık yalnızca çalışan bir kod elde etmiyor, kodun neden çalıştığını da anlıyordu.
Ayşe ise uygulamayı başka bir açıdan değerlendirdi. Favorilere ekleme işleminin kolay bulunup bulunmadığını, butonun anlaşılır olup olmadığını ve kullanıcıların bir işlem yaptıklarında yeterli geri bildirim alıp almadıklarını sorguladı.
Mert başlangıçta bu ayrıntıları ikincil konular olarak görüyordu. Sonra fark etti ki teknik açıdan çalışan bir özellik, kullanıcı açısından anlaşılır veya yararlı olmak zorunda değildi.
Bu deneyim ona iki önemli ders verdi: Teknik sorunları çözebilmek için sağlam kavramlara ihtiyaç vardı; iyi bir uygulama geliştirmek içinse insanların o uygulamayla nasıl ilişki kurduğunu anlamak gerekiyordu.
5. Bölüm: Çözüm Odaklılık ve Empati Aynı Projede Buluşunca
Uygulamanın ilk sürümü hazırlandığında Mert, birkaç arkadaşından uygulamayı denemelerini istedi. Sonuçlar beklediği gibi olmadı.
Kullanıcılardan biri eşya ekleme ekranını bulamadı. Bir başkası, paylaştığı eşyanın kimler tarafından görülebildiğini anlamadığını söyledi. Bir diğeri ise bir ürünü almak isteyen kişiyle iletişim kurarken kişisel telefon numarasını paylaşmak istemediğini belirtti.
Mert'in ilk tepkisi, uygulamaya yeni özellikler eklemek oldu. Daha ayrıntılı bir menü, yeni butonlar ve farklı ekranlar tasarlamayı düşündü.
Kerem, sorunları sınıflandırmayı önerdi. Kullanıcıların hangi ekranda zorlandığını, hangi işlemin tamamlanamadığını ve hangi hataların daha sık tekrarlandığını belirlemek için bir liste hazırladı.
Ayşe ise test yapan insanlarla yeniden konuştu. Onlara yalnızca neyin çalışmadığını sormakla yetinmedi; uygulamayı kullanırken kendilerini nasıl hissettiklerini, neden bazı bilgileri paylaşmak istemediklerini ve hangi durumlarda güvensiz hissettiklerini anlamaya çalıştı.
İki yaklaşım birlikte işe yaradı.
Kerem, sorunların teknik nedenlerini araştırdı. Ayşe, kullanıcıların beklentilerini ve çekincelerini ortaya çıkardı. Mert de elde ettikleri bilgileri bir araya getirerek uygulamanın önceliklerini yeniden belirledi.
Örneğin, yeni özellikler eklemek yerine eşya paylaşma adımlarını sadeleştirdiler. Kullanıcılara hangi bilgilerin herkese açık olduğunu anlatan açıklamalar eklediler. İletişim konusunda daha kontrollü seçenekleri araştırmaya başladılar.
Burada erkeklerin çözüm odaklı, kadınların ise empatik olduğu gibi kesin bir ayrım yapmak doğru olmaz. Kerem'in sistematik yaklaşımı ile Ayşe'nin kullanıcı deneyimine gösterdiği özen, kişisel yetenekleri ve mesleki deneyimleriyle ilgiliydi. Her iki yaklaşım da cinsiyetten bağımsız olarak öğrenilebilir ve geliştirilebilir becerilerdi.
Bu hikâyede asıl önemli olan, iki bakış açısının birbirini tamamlamasıydı. Strateji, hangi sorunun önce çözülmesi gerektiğini belirlemeye yardımcı oldu. Empati ise çözümün kimin için ve hangi ihtiyaca yönelik üretildiğini görünür kıldı.
Yazılım geliştirme de tam olarak burada teknik bir faaliyetin ötesine geçiyordu. Kod, insanların hayatında bir değişiklik oluşturduğu ölçüde anlam kazanıyordu.
Siz bir uygulama geliştirirken kullanıcıların söylediklerine mi, kullanım verilerine mi, yoksa kendi teknik sezginize mi daha fazla güveniyorsunuz? Bu kaynaklardan biri diğerlerinin önüne geçtiğinde neler kaybolabilir?
6. Bölüm: Peki, React Öğrenmeden React Native Öğrenilir mi?
Mert'in hikâyesi ilerledikçe sorunun cevabı daha açık hâle geldi. Evet, React'i önceden kapsamlı biçimde öğrenmeden React Native ile uygulama geliştirmeye başlanabilir. Ancak React'in temel kavramlarını öğrenmek, özellikle uygulama büyüdükçe büyük avantaj sağlar.
Burada önemli olan, React öğrenmekten ne anlaşıldığıdır. React'in bütün ekosistemini, gelişmiş mimari yaklaşımlarını veya web uygulamalarındaki her ayrıntıyı bilmek zorunda değilsiniz. React Native'e başlamak için öncelikle ihtiyaç duyacağınız temel kavramları anlamanız yeterlidir.
Mert, öğrenme sürecini beş aşamaya ayırdı.
Birinci aşama: JavaScript temelleri
Değişkenler, veri türleri, fonksiyonlar, diziler, nesneler, koşullar, döngüler ve modüller üzerinde çalıştı. Ardından map, filter, find gibi dizi metotlarını öğrendi. Çünkü uygulamalarda eşya listeleri göstermek, verileri filtrelemek ve belirli kayıtları bulmak gibi işlemlerle sık sık karşılaşacaktı.
Ayrıca async/await, Promise yapısı ve temel hata yönetimi konularına giriş yaptı. İnternetten veri alan bir mobil uygulamada asenkron işlemleri anlamak önemliydi.
İkinci aşama: React'in temel mantığı
Bileşenlerin nasıl oluşturulduğunu öğrendi. JSX sözdizimini tanıdı. Props ile bileşenlere veri aktarmayı, state ile değişen bilgileri yönetmeyi ve olaylara tepki vermeyi denedi.
Ardından useState ve useEffect gibi temel Hooks yapılarını inceledi. Bir bileşenin neden yeniden görüntülendiğini, durum değişikliklerinin arayüzü nasıl etkilediğini ve yan etkilerin nasıl yönetildiğini anlamaya çalıştı.
Üçüncü aşama: React Native'e geçiş
Bu aşamada View, Text, Image, TextInput, Pressable ve ScrollView gibi temel bileşenlerle tanıştı. Web tarafındaki HTML ve CSS yaklaşımının mobil geliştirmede birebir aynı şekilde uygulanmadığını gördü.